Панды Python удаляют дубликаты строк в столбце, если дубликатов в другом столбце нет

#python #pandas #duplicates #drop

#питон #панды #дубликаты #капля

Вопрос:

У меня есть этот df с заголовками электронной почты. Мне нужно устранить все дубликаты, где Тема одна и та же, а источник другой. Я потратил часы, пытаясь найти решение или найти похожий случай…

Дата От Предмет Источник
12/06/21 Отправитель1 Тест123 Входящие
12/06/21 Отправитель2 Подтверждать Входящие
12/06/21 Отправитель1 Тест123 Отправлено
12/06/21 Отправитель3 Test_on Входящие
12/06/21 Отправитель3 Test_on Входящие

Практически из таблицы выше следует удалить строки с subject = ‘Test123’.

Дата От Предмет Источник
12/06/21 Отправитель2 Подтверждать Входящие
12/06/21 Отправитель3 Test_on Входящие
12/06/21 Отправитель3 Test_on Входящие

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

1. что-то вроде df[df['Subject'].duplicated(keep=False) amp; ~df['Source'].duplicated(keep=False)] ?

Ответ №1:

Вы можете использовать set , чтобы определить для каждого отправителя, существует ли несколько источников. Если да, удалите строку.

 gt;gt;gt; df.loc[df.groupby('From')['Source'].transform(lambda x: len(set(x)) == 1)]   Date From Subject Source 1 12/06/21 Sender2 Confirm Inbox 3 12/06/21 Sender3 Test_on Inbox 4 12/06/21 Sender3 Test_on Inbox  

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

1. И это работает… Спасибо тебе, Корралиен!

Ответ №2:

 duplicated_subject = df.duplicated('Subject', keep=False) duplicated_subject_and_source = df.duplicated(['Subject', 'Source'], keep=False) df[~duplicated_subject | duplicated_subject_and_source]  

устраните все дубликаты, где «Тема одна и та же, А источник другой».

эквивалентно

сохраняйте там, где «Тема не дублируется ИЛИ Тема дублируется, а источник один и тот же».