在熊猫中按ID有条件地删除行

时间:2019-07-18 10:01:24

标签: python pandas

我有一个熊猫df:

ID Score C  D 
1  2     x  y
1  nan   x  y
1  2     x  y
2  3     x  y
2  2     x  y
3  2     x  y
3  4     x  y
3  3     x  y

对于每个ID,都希望删除df.Score = 2的行,但仅当该ID存在3或4时才行。当每个ID的唯一分数= 2时,我想保留nans2

所以我得到了

ID Score C  D 
1  2     x  y
1  nan   x  y
1  2     x  y
2  3     x  y
3  4     x  y
3  3     x  y

任何帮助,非常感谢

1 个答案:

答案 0 :(得分:2)

使用:

df[~df.groupby('ID')['Score'].apply(lambda x:x.eq(2)&x.isin([3,4]).any())]

   ID  Score  C  D
0   1    2.0  x  y
1   1    NaN  x  y
2   1    2.0  x  y
3   2    3.0  x  y
6   3    4.0  x  y
7   3    3.0  x  y