我在从数据框架中删除一些记录时遇到了麻烦。如果我对某个列进行分组,并在另一列中检查该列组中每个组是否在另一列中有任何特定值,如果该特定值不存在,则从第一列(我们之前应用了group的列)中删除整个组。我的数据如下:
search_value_per_group | Column_to_Be_Grouped | 巴基斯坦 | • | 沙特阿拉伯
---|---|
Irshad | |
阿伊莎 | |
• | |
• | |
• | |
阿伊莎 | |
阿伊莎 | |
佐汉 | |
佐汉 | |
佐汉 | |
佐汉 | |
佐汉 | |
荷兰 | Irshad |
Irshad | |
Irshad |
获取所有匹配的组并通过boolean indexing
与Series.isin
进行筛选:
groups = df.loc[df['search_value_per_group'].eq('Pakistan'),'Column_to_Be_Grouped']
df1 = df[df['Column_to_Be_Grouped'].isin(groups)]
print (df1)
search_value_per_group Column_to_Be_Grouped
0 Pakistan Ehsan
2 Pakistan Ayesha
3 India Ehsan
4 Switzerland Ehsan
5 Nigeria Ehsan
6 Saudi Arabia Ayesha
7 UK Ayesha
8 Pakistan Zohan
9 Afghanistan Zohan
10 Iraq Zohan
11 Iran Zohan
12 USA Zohan
您可以使用GroupBy.transform('any')
生成布尔系列布尔索引:
out = df[df['search_value_per_group'].eq('Pakistan')
.groupby(df['Column_to_Be_Grouped']).transform('any')]
输出:
search_value_per_group Column_to_Be_Grouped
0 Pakistan Ehsan
2 Pakistan Ayesha
3 India Ehsan
4 Switzerland Ehsan
5 Nigeria Ehsan
6 Saudi Arabia Ayesha
7 UK Ayesha
8 Pakistan Zohan
9 Afghanistan Zohan
10 Iraq Zohan
11 Iran Zohan
12 USA Zohan