首页 > 解决方案 > 在 Pandas 中按 ID 有条件地删除行

问题描述

我有一个熊猫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 时。我想保留每个 IDnans2唯一分数 = 2。

所以我得到:

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

任何帮助,非常感谢

标签: pythonpandas

解决方案


采用:

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

推荐阅读