[英]Filter grouped pandas dataframe, keep all rows with minimum value in column
[英]Filter pandas dataframe based on a column: keep all rows if a value is that column
所以我有一個如下數據框:
Name Age City
A 21 NY
A 20 DC
A 35 OR
B 18 DC
B 19 PA
我需要保留每個“ Name
和Age
對的所有行,其中特定值與列City
相關聯。 例如,如果我的目標城市是NY
,那么我的期望輸出將是:
Name Age City
A 21 NY
A 20 DC
A 35 OR
Edit1:我不一定要尋找一個值。 在某些情況下,我可能正在尋找多個城市。 例如:同時使用NY
和DC
。
Edit2:我嘗試了以下方法,這些方法不會返回正確的輸出(daah):
df = df[df['City'] == 'NY']
和
df = df[df['City'].isin('NY')]
您可以創建函數-首先測試City
是否相等,然后獲取所有唯一名稱,以再次通過isin
進行過濾:
def get_df_by_val(df, val):
return df[df['Name'].isin(df.loc[df['City'].eq(val), 'Name'].unique())]
print (get_df_by_val(df, 'NY'))
Name Age City
0 A 21 NY
1 A 20 DC
2 A 35 OR
print (get_df_by_val(df, 'PA'))
Name Age City
3 B 18 DC
4 B 19 PA
print (get_df_by_val(df, 'OR'))
Name Age City
0 A 21 NY
1 A 20 DC
2 A 35 OR
編輯:
如果需要檢查每個組的多個值,請使用GroupBy.transform
和帶有issubset
比較set
s:
vals = ['NY', 'DC']
df1 = df[df.groupby('Name')['City'].transform(lambda x: set(vals).issubset(x))]
print (df1)
Name Age City
0 A 21 NY
1 A 20 DC
2 A 35 OR
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.