#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. Потрясающе! И вы правы насчет избыточного столбца, оцените это! Спасибо