python - 通过动态生成的值(最新日期)过滤熊猫数据框中的行
问题描述
我有一个包含通讯类型、通讯名称、通讯发布日期和电子邮件的数据集。每次发布都会经过很多行,因为收到新闻稿发布的每个电子邮件地址都有自己的行。
所有时事通讯都至少发布一次,但有些时事通讯有多次发布。我想清理我的数据集,以便我只有每个时事通讯的最新发布。但是,每个时事通讯的“最近”日期是不同的。
我一直在尝试按日期降序排序,然后删除重复并保留第一个值。
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
编辑2:
对不起,我解释得很糟糕。如果我对以下数据集进行重复数据删除,我将获得 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 = df.sort_values(by=['launch date']).groupby('newsletter name').first()
推荐阅读
- machine-learning - CNN的卷积层需要多少个神经元?
- dialogflow-es - 如何从显示轮播的意图向处理轮播的意图传递除选项以外的一个参数?
- azure - 使用开始日期和结束日期执行 azure data factory foreach 活动
- php - Symfony 5 - 捆绑“WebProfilerBundle”不存在或未启用
- php - 使用不同于密码的字段对 HTTP Basic 进行身份验证
- kotlin - SQLDelight:Kotlin Multiplatform App 中未解决的参考 AndroidSqliteDriver
- javascript - Angularfire检查密码
- php - 试图获取变量 insisde 变量
- python - 减少python程序计算的算法时间
- php - 将字符串转换为文件 - laravel