我有一个包含时事通讯类型、时事通讯名称、时事通讯发布日期和电子邮件的数据集。每次启动都要经过许多行,因为收到时事通讯启动的每个电子邮件地址都有自己的一行。
所有的时事通讯都至少有一次发布,但有些时事通讯有很多次发布。我想要清理我的数据集,以便我只拥有每个时事通讯的最新发布。然而,每个时事通讯的“最近”日期是不同的。
我一直在尝试按日期降序排序,然后去重并保留第一个值。
df = df.sort_values('timestamp',ascending=False)
df = df.drop_duplicates(subset='newsletter_type','newsletter_name','email'],keep="first")因为这将保留最新发布的版本,并删除其余的版本。然而,我意识到,如果用户在10年前取消订阅了10份时事通讯,我的程序会将其视为一个“新”电子邮件地址,并保留它。
有什么好方法可以做到这一点吗?用伪SQL“说话”,我基本上想用一种方式来说
SELECT newsletter_type, newsletter_name, email FROM dataset WHERE launch_date = MAX(launch_date)。
编辑:示例数据。我不想要最下面的一行,但因为该电子邮件以前没有在此newsletter_name中看到过,所以重复数据消除将保留它。我想知道如何告诉熊猫们保持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/2020EDIT2:
抱歉,我解释得不好。如果我对下面的数据集进行重复数据消除,我将获得7月5日的电子邮件地址数量= great,以及abcde@hotmail email address = bad的值。
我想要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发布于 2020-07-10 01:04:36
我会按“发布日期”排序,并按“时事通讯名称”分组(如果这是一个人想要保存其中一个的唯一类型)。这将只返回每个唯一的“新闻信件”的最新消息。
df = df.sort_values(by=['launch date']).groupby('newsletter name').first()https://stackoverflow.com/questions/62819908
复制相似问题