Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果行不满足使用pandas的条件,如何删除行_Python_Pandas - Fatal编程技术网

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