Python 如果行不满足使用pandas的条件,如何删除行
我有以下数据帧:Python 如果行不满足使用pandas的条件,如何删除行,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
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的所有行,因此结果如下:
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
最好的方法是什么
谢谢。我们可以使用isin和布尔值查找您的ID
ids = df.loc[df['TreatmentNumber'].eq(1)]['ID'].unique()
df1 = df.loc[df['ID'].isin(ids)]
print(df1)
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
您可以使用
groupby().transform()
:
输出:
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
groupby
和filter
我逐渐习惯了
transform
,所以我完全忘记了filter
,transform
更快(至少在简单的测试中是这样)。我只是想增加边际价值(-:
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
df.groupby('ID').filter(lambda d: d.TreatmentNumber.eq(1).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