首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按动态生成的值(最新日期)筛选pandas数据帧中的行

按动态生成的值(最新日期)筛选pandas数据帧中的行
EN

Stack Overflow用户
提问于 2020-07-10 00:56:43
回答 1查看 57关注 0票数 0

我有一个包含时事通讯类型、时事通讯名称、时事通讯发布日期和电子邮件的数据集。每次启动都要经过许多行,因为收到时事通讯启动的每个电子邮件地址都有自己的一行。

所有的时事通讯都至少有一次发布,但有些时事通讯有很多次发布。我想要清理我的数据集,以便我只拥有每个时事通讯的最新发布。然而,每个时事通讯的“最近”日期是不同的。

我一直在尝试按日期降序排序,然后去重并保留第一个值。

代码语言:javascript
复制
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日的时事通讯“样本”,因为这是最新的。

代码语言:javascript
复制
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日的电子邮件地址数量= great,以及abcde@hotmail email address = bad的值。

我想要05/07时事通讯行为时事通讯A,和04/07时事通讯行为时事通讯B。我知道数字电子邮件地址将出现在两个newsletter_type变种。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2020-07-10 01:04:36

我会按“发布日期”排序,并按“时事通讯名称”分组(如果这是一个人想要保存其中一个的唯一类型)。这将只返回每个唯一的“新闻信件”的最新消息。

代码语言:javascript
复制
df = df.sort_values(by=['launch date']).groupby('newsletter name').first()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62819908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档