#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]
устраните все дубликаты, где «Тема одна и та же, А источник другой».
эквивалентно
сохраняйте там, где «Тема не дублируется ИЛИ Тема дублируется, а источник один и тот же».