У меня есть набор данных с типом информационного бюллетеня, названием информационного бюллетеня, датой запуска информационного бюллетеня и адресом электронной почты. Каждый запуск занимает много строк, потому что каждый адрес электронной почты, на который был запущен информационный бюллетень, имеет свою собственную строку.
Все информационные бюллетени запускаются по крайней мере один раз, но некоторые информационные бюллетени имеют несколько запусков. Я хочу очистить свой набор данных, чтобы у меня был только последний запуск каждого информационного бюллетеня. Однако «самая последняя» дата для каждого информационного бюллетеня разная.
Я пытался отсортировать по дате по убыванию, а затем исключить дубликаты и сохранить первое значение.
df = df.sort_values('timestamp',ascending=False)
df = df.drop_duplicates(subset='newsletter_type','newsletter_name','email'],keep="first")
Потому что это позволит сохранить самый последний запуск и избавиться от остальных. Однако я понял, что если пользователь отменил подписку, десять информационных бюллетеней запускают go, моя программа увидит это как «новый» адрес электронной почты и сохранит его.
Есть хороший способ сделать это? «Говоря» псевдо-SQL, я бы в основном хотел сказать
SELECT newsletter_type, newsletter_name, email FROM dataset WHERE launch_date = MAX(launch_date)
.
EDIT: образец данных. Мне не нужна нижняя строка, но поскольку это электронное письмо не было раньше для этого newsletter_name, de-dupe сохранит его. Я хочу знать, как указать pandas, чтобы сохранить выпуск «образца» информационного бюллетеня 09/07/2020, потому что он последний.
campaign_name newsletter name newsletter type email_md5 timestamp
test5 sample A 123@ 09/07/2020
test5 sample A 456@ 09/07/2020
test5 sample A 789@ 09/07/2020
test5 sample A 012@ 09/07/2020
test5 sample A 345@ 09/07/2020
test5 sample A new@ 08/07/2020
EDIT2:
Извините, я плохо объяснил . Если я устраню дублирующий набор данных ниже, я получу значения 5 июля для количества адресов электронной почты = отлично, но также и abcde@hotmail адрес электронной почты = плохой.
Мне нужны строки информационного бюллетеня 05/07 для информационный бюллетень A и строки информационного бюллетеня 04/07 для информационного бюллетеня B. Я знаю, что количество адресов электронной почты будет отображаться в обоих вариантах newsletter_type.
Newsletter_type Launch_name Launch_date Email
A 5_July_newsletter 05/07/2020 12345@hotmail
A 5_July_newsletter 05/07/2020 67890@hotmail
A 5_July_newsletter 05/07/2020 55555@hotmail
A 1_January_newsletter 05/06/2020 12345@hotmail
A 1_January_newsletter 05/06/2020 67890@hotmail
A 1_January_newsletter 05/06/2020 55555@hotmail
A 1_January_newsletter 05/06/2020 abcde@hotmail
B 5_July_newsletter 04/07/2020 12345@hotmail
B 5_July_newsletter 04/07/2020 67890@hotmail
B 5_July_newsletter 04/07/2020 55555@hotmail
B 1_January_newsletter 04/06/2020 12345@hotmail
B 1_January_newsletter 04/06/2020 67890@hotmail
B 1_January_newsletter 04/06/2020 55555@hotmail
B 1_January_newsletter 04/06/2020 abcde@hotmail