根据一列过滤熊猫数据框:保留所有行(如果值是该列)

时间:2018-07-26 14:16:17

标签: python pandas

所以我有一个如下数据框:

Name    Age    City
A       21     NY
A       20     DC
A       35     OR
B       18     DC
B       19     PA

我需要保留每对NameAge对的所有行,其中特定值在与列City关联的行中。例如,如果我的目标城市是NY,那么我的期望输出将是:

Name    Age    City
A       21     NY
A       20     DC
A       35     OR

Edit1 :我不一定要查找单个值。在某些情况下,我可能正在寻找多个城市。例如:NYDC同时使用。

Edit2:我尝试了以下操作,这些操作均未返回正确的输出(daah):

df = df[df['City'] == 'NY']

df = df[df['City'].isin('NY')]

1 个答案:

答案 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并将setissubset进行比较:

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