如何删除`row [patient_id]`重复的行和`row [Target] == 0`?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何删除`row [patient_id]`重复的行和`row [Target] == 0`?相关的知识,希望对你有一定的参考价值。
我想从我的.csv文件中删除所有行,其中:
1)row[patient_id]
是重复的
2)row[Target] == 0
cols的名字:patientId x y w h Target
patientId x y w h Target
'2341-vcb1' '10' '20' '30' '40' '1'
'2341-vcb1' '70' '20' '70' '40' '1'
'2341-vcb1' '0' <-delete it
'1111-xcsc' '0'
'2341-v233' '34' '43' '10' '29' '1'
df2 = df2.drop_duplicates(subset ='patientId'&& ???)
答案
您可以做的一件事是创建一个列,您可以在其中计算目标的累积总和。首先按PatientId对df进行排序,然后按降序排列,然后使用groupby和cumsum函数将目标加起来(称之为target_sum)。获得该列后,可以删除target = 0和target_sum> 0的行。
它背后的逻辑:
- 如果id在target == 0的行上方有其他有效行(因为我们已经对它进行了排序),target_sum应该> 0。因此,如果我们看到target_sum> 0,我们就知道这一行有一个重复的id。
- 如果target_sum = 0,则表示特定id没有任何其他具有有效值的行,因此我们希望保留它。
df['target_sum'] = df.sort_values(by=['patientID','Target'], ascending=False).Target.groupby('patientID').cumsum()
df = df[~ (df['Target'] == 0) & (df['target_sum' > 0])]
另一答案
你可以试试
import numpy as np
df[~np.logical_and(df.patientId.duplicated(), df.Target==0)]
# patientId x y w h Target
# 0 2341-vcb1 10.0 20.0 30.0 40.0 1
# 1 2341-vcb1 70.0 20.0 70.0 40.0 1
# 3 1111-xcsc NaN NaN NaN NaN 0
# 4 2341-v233 34.0 43.0 10.0 29.0 1
以上是关于如何删除`row [patient_id]`重复的行和`row [Target] == 0`?的主要内容,如果未能解决你的问题,请参考以下文章