簡體   English   中英

根據一列過濾熊貓數據框:保留所有行(如果值是該列)

[英]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

我需要保留每個“ 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')]

您可以創建函數-首先測試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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM