所以我有一个如下数据框:
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')]
答案 0 :(得分:4)
您可以创建函数-首先测试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
并将set
与issubset
进行比较:
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