我的目标是在 Pandas df 中删除行,其中一行等于特定值。但是,我想扩展它,以便它还删除按单独列分组的关联行。例如,我想删除 Label
== A,D
的所有行,但我还要删除来自同一组的 Num
中的关联行。
import pandas as pd
df = pd.DataFrame({
'Num' : [1,1,1,2,2,3,3,4,4,4],
'Label' : ['X','X','A','Y','Y','Y','Y','Y','Y','D'],
})
df = df.groupby('Num').filter(lambda x: (x['Label'].isin['A','D']).any())
预期输出:
Num Label
3 2 Y
4 2 Y
5 3 Y
6 3 Y
答案 0 :(得分:2)
你很接近,只需添加否定:
df.groupby('Num').filter(lambda x: ~x['Label'].isin(['A','D']).any())
输出:
Num Label
3 2 Y
4 2 Y
5 3 Y
6 3 Y
答案 1 :(得分:1)
让我们尝试使用 isin
没有 groupby
out = df.loc[~df.Num.isin(df.loc[df.Label.isin(['A','D']),'Num'])]
Out[108]:
Num Label
3 2 Y
4 2 Y
5 3 Y
6 3 Y