如何删除`row [patient_id]`重复的行和`row [Target] == 0`?

问题描述 投票:1回答:2

我想从我的.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'

image

df2 = df2.drop_duplicates(subset ='patientId'&& ???)

python csv dataframe
2个回答
1
投票

您可以做的一件事是创建一个列,您可以在其中计算目标的累积总和。首先按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])] 

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     
© www.soinside.com 2019 - 2024. All rights reserved.