Дубликаты с использованием python, если есть, создают новый столбец при совпадении

#python #python-3.x #pandas #dataframe

#python #python-3.x #pandas #фрейм данных

Вопрос:

В настоящее время я пытаюсь провести анализ, в котором люди могут что-то делать, чтобы избежать системы. Итак, я создал новое поле внутри моего фрейма данных, куда я добавил дату выдачи и имя потенциального нарушителя. Я хочу следующее: если какая-либо из строк имеет одинаковый идентификатор аудита, скажите «да», если нет, NaN.

Так, например, у меня есть:

 Offender Name  Issue Date  Audit ID
Joe            12/02/2020  Joe-12/02/20
Nic            20/02/2020  Nic-20/02/20
Mat            01/02/2020  Mat-01/02/20
Joe            12/02/2020  Joe-12/02/20
  

И я хочу что-то вроде:

 Offender Name  Issue Date  Audit ID        Matches
Joe            12/02/2020  Joe-12/02/20    Yes
Nic            20/02/2020  Nic-20/02/20    No
Mat            01/02/2020  Mat-01/02/20    No 
Joe            12/02/2020  Joe-12/02/20    Yes
  

Я был бы признателен за любую информацию, которую кто-либо может мне дать

Комментарии:

1. «No» — это не то же самое, что «NaN», и похоже, что вы на самом деле не пытались сделать это самостоятельно. На чем вы застряли?

2. Мой плохой я о ‘No’ и ‘NaN’ .. И на самом деле да, я пытался найти способ, я изначально сделал groupby и подсчитал совпадения, а затем объединил результаты с моим текущим фреймом данных. Однако я ищу более эффективный подход

Ответ №1:

Вы можете пометить дубликаты «Да» и «Нет»

 df['Matches'] = df.duplicated('Audit ID', keep=False).map({True: 'Yes',False: 'No'})
df
  

Out:

   Offender Name  Issue Date      Audit ID Matches
0           Joe  12/02/2020  Joe-12/02/20     Yes
1           Nic  20/02/2020  Nic-20/02/20      No
2           Mat  01/02/2020  Mat-01/02/20      No
3           Joe  12/02/2020  Joe-12/02/20     Yes
  

Столбец Audit ID является избыточным. У вас уже есть та же информация в вашем фрейме данных

 df['Matches'] = df.duplicated(['Offender Name','Issue Date'], keep=False).map({True: 'Yes',False: 'No'})
df
  

Out:

   Offender Name  Issue Date      Audit ID Matches
0           Joe  12/02/2020  Joe-12/02/20     Yes
1           Nic  20/02/2020  Nic-20/02/20      No
2           Mat  01/02/2020  Mat-01/02/20      No
3           Joe  12/02/2020  Joe-12/02/20     Yes
  

Комментарии:

1. Потрясающе! И вы правы насчет избыточного столбца, оцените это! Спасибо