Как удалить строки, где `row [Patient_id]` дублируется и `row [Target] == ​​0`? - PullRequest
1 голос
/ 24 апреля 2019

Я хочу удалить все строки из моего 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' && ???)

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Одна вещь, которую вы можете сделать, это создать столбец, в котором вы вычисляете совокупную сумму цели.Сначала вы сортируете df по PatientId, а затем выбираете цель в порядке убывания, затем используете функции groupby и cumsum для добавления цели (назовите ее target_sum).Если у вас есть этот столбец, вы можете удалить строки, где target = 0 и target_sum> 0.

Логика, стоящая за ним:

  • , если идентификатор имеет другие допустимые строки над строкой, гдеtarget == 0 (так как мы уже отсортировали его), target_sum должен быть> 0.Таким образом, если мы видим, что target_sum> 0, мы знаем, что у этой строки есть дублированный идентификатор.
  • , если target_sum = 0, это означает, что у определенного идентификатора нет других строк с допустимыми значениями, поэтому мы хотим сохранить его.

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 голосов
/ 24 апреля 2019

Вы можете попробовать

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     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...