python - 如果行不满足使用 pandas 的条件,如何删除行

标签 python pandas

我有以下数据框:

ID  Days TreatmentGiven TreatmentNumber
--- ---- -------------- ---------------
1    0      False             NaN
1    30     False             NaN
1    40     True              1.0
1    56     True              2.0 
2    0      False             NaN
2    14     True              4.0
2    28     True              5.0
3    0      False             NaN
3    28     True              1.0
3    56     True              2.0
4    0      False             NaN
4    100    True              6.0
4    128    True              7.0

我想删除 ID 不包含 TreatmentNumber == 1.0 的所有行,结果如下:

ID  Days TreatmentGiven TreatmentNumber
--- ---- -------------- ---------------
1    0      False             NaN
1    30     False             NaN
1    40     True              1.0
1    56     True              2.0 
3    0      False             NaN
3    28     True              1.0
3    56     True              2.0

最好的方法是什么?

谢谢。

最佳答案

您可以使用groupby().transform():

df[df.TreatmentNumber.eq(1).groupby(df['ID']).transform('any')]

输出:

   ID  Days  TreatmentGiven  TreatmentNumber
0   1     0           False              NaN
1   1    30           False              NaN
2   1    40            True              1.0
3   1    56            True              2.0
7   3     0           False              NaN
8   3    28            True              1.0
9   3    56            True              2.0

关于python - 如果行不满足使用 pandas 的条件,如何删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60839146/

相关文章:

python - if 语句嵌套在 for 循环中

python - Pandas 按 groupby 求和,但不包括某些列

python - 如何旋转数据框

python - 两列上最近的匹配合并(pandas)

python - 如何根据条件检查两行并将其合并为python中的单行

python - 有效地计算数组中 N 个最小数字的总和

python - 使用记事本作为数据库登录 Tkinter

Python subprocess.Popen stdin 干扰 stdout/stderr

python - Pandas 中的日期时间比较搞乱了 datetime.time()

python - 标准化后的 PIL 逊相关性