You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python DataFrame结合时间戳去除重复数据问题求助

问题解决:按用户+文章ID保留最后操作记录

核心问题分析

你之前的代码只以article_id作为去重依据,这会导致所有用户对同一文章的记录只保留最后一条,而不是你需要的「每个用户对每篇文章保留最后一条记录」。这就是结果行数不符合「文章数×用户数」预期的根本原因。

正确解决方案

1. 先按时间排序(关键前提)

drop_duplicates的keep='last'是基于DataFrame的当前行顺序,并非自动按时间先后判定。所以首先要确保数据按时间升序排列,保证最后出现的行是最新的操作记录:

# 先将created_at转为datetime类型(如果还未转换)
df['created_at'] = pd.to_datetime(df['created_at'])
# 按用户ID和创建时间升序排序
df_sorted = df.sort_values(by=['user_id', 'created_at'])

2. 按用户+文章ID联合去重

将subset参数设置为['user_id', 'article_id'],这样会针对每个用户的每篇文章单独保留最后一条记录:

data_last = df_sorted.drop_duplicates(subset=['user_id', 'article_id'], keep='last')

效果验证

处理后,每个user_id与article_id的组合只会出现一次,总条数会接近「文章数量×用户数量」,完全符合你的预期。比如你提供的示例数据中,用户111111的文章1、2、3各留最后一条,最终会得到3条记录。

补充提示

如果原始数据已经严格按时间顺序录入,排序步骤可省略,但建议保留该步骤,避免因数据乱序导致保留的不是最新操作记录。

内容的提问来源于stack exchange,提问作者Cba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:47:34