【发布时间】:2020-10-30 08:18:59
【问题描述】:
我有一个包含新闻稿类型、新闻稿名称、新闻稿发布日期和电子邮件的数据集。每次发布都会经过很多行,因为收到新闻稿发布的每个电子邮件地址都有自己的行。
所有时事通讯都至少发布一次,但有些时事通讯有多次发布。我想清理我的数据集,以便我只有每个时事通讯的最新发布。但是,每个时事通讯的“最近”日期是不同的。
我一直在尝试按日期降序排序,然后删除重复并保留第一个值。
df = df.sort_values('timestamp',ascending=False)
df = df.drop_duplicates(subset='newsletter_type','newsletter_name','email'],keep="first")
因为这会保留最近的发布并删除其余的。但是,我意识到,如果用户取消订阅了十个之前发布的时事通讯,我的程序会将其视为“新”电子邮件地址并保留它。
有什么好办法吗? 'Speaking' in pseudo-SQL,我基本上是想说一种方式
SELECT newsletter_type, newsletter_name, email FROM dataset WHERE launch_date = MAX(launch_date).
编辑:样本数据。我不想要最后一行,但因为之前没有看到此 newsletter_name 的电子邮件,重复数据删除将保留它。我想知道如何告诉 pandas 保留 2020 年 9 月 7 日发布的“样本”时事通讯,因为它是最新的。
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:
对不起,我解释得很糟糕。如果我对以下数据集进行重复数据删除,我将获得 7 月 5 日的数字电子邮件地址值 = 好,但也得到 abcde@hotmail 电子邮件地址 = 坏。
我想要时事通讯 A 的 05/07 时事通讯行和时事通讯 B 的 04/07 时事通讯行。我知道数字电子邮件地址将出现在两个 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
【问题讨论】:
-
df.loc[df['timestamp'].idxmax()]为我工作,如果您有多个广告系列,您想要每个组中的唯一一个怎么办?如果第一部分回答了您的问题,请告诉我有一些骗子也可以链接 -
我想要每个时事通讯的最大日期的所有电子邮件值。
标签: python pandas date duplicates filtering