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
相关产品推荐
相关产品推荐

