Одна вещь, которую вы можете сделать, это создать столбец, в котором вы вычисляете совокупную сумму цели.Сначала вы сортируете 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])]