我有3列的pandas数据框:
df = pd.DataFrame({'DEST_NAME':['A','A','B','B','C','D','E','E','F'],
'ID':['4624','4625','4624','4625','4625','4625','4624','4625','4625'],
'COUNT':[203,202,100,23,2,200,203,2022,201]})
DEST_NAME ID COUNT
0 A 4624 203
1 A 4625 202
2 B 4624 100
3 B 4625 23
4 C 4625 2
5 D 4625 200
6 E 4624 203
7 E 4625 2022
8 F 4625 201
9 D 4625 125
10 D 4625 122
11 C 4625 3
我尝试获取其中DEST_NAME
仅具有ID
的{{1}}而不是4625
的行。因此,如果4624
在列DEST_NAME
中同时具有4624
和4625
条目,则基本上排除在外。因此结果将如下所示:
ID
答案 0 :(得分:3)
您可以提取范围内和范围外的DEST_NAME
。然后使用pd.Series.isin
并结合您的两个条件:
ids_inc = df.loc[df['ID'] == '4625', 'DEST_NAME']
ids_exc = df.loc[df['ID'] == '4624', 'DEST_NAME']
res = df[df['DEST_NAME'].isin(ids_inc) & ~df['DEST_NAME'].isin(ids_exc)]
print(res)
COUNT DEST_NAME ID
4 2 C 4625
5 200 D 4625
8 201 F 4625
答案 1 :(得分:2)
您可以检查哪些行包含ID
和4625
GroupBy
的{{1}},以仅保留所有值为DEST_NAME
的行。然后使用这些值对数据框执行布尔索引:
True
答案 2 :(得分:0)
尝试:
df_filtered = df[df['ID'] == '4625'].copy()
答案 3 :(得分:0)
df = pd.DataFrame({'DEST_NAME':['A','A','B','B','C','D','E','E','F'],
'ID':['4624','4625','4624','4625','4625','4625','4624','4625','4625'],
'COUNT':[203,202,100,23,2,200,203,2022,201]})
df2=df[df['ID']=='4625']
结果:
COUNT DEST_NAME ID
1 202 A 4625
3 23 B 4625
4 2 C 4625
5 200 D 4625
7 2022 E 4625
8 201 F 4625
答案 4 :(得分:0)
我发现pandas.DataFrame.query
方法是一种过滤数据的好方法。我想在您的情况下,它会给出:
df.query("ID == '4625' & ID != 4624")