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

Python Pandas如何按id和日期去重(每日仅保留每个id的第一条记录)

解决方案

你需要在drop_duplicates方法中通过subset参数指定id+日期维度的组合作为重复判定标准,即可实现单日维度的id去重,不会影响其他日期的同id记录。

方法1:基于现有年、月、日字段实现

你的表中已经有year、month、day三个可以确定唯一日期的字段,直接将这三个字段和id共同作为去重判定键即可:

# 按seen时间升序排序,默认保留每天同个id的第一条记录(即进入记录)
df_filtered = df.sort_values("seen").drop_duplicates(
    subset=["id", "year", "month", "day"],
    keep="first"
)

如果需要保留每天最晚的那条离开记录,将keep参数改为"last",或者将sort_values的排序规则改为倒序即可。

方法2:直接从时间字段提取日期(不依赖现有年日月字段)

如果不想依赖表中已有的年、月、日字段,也可以直接从seen时间列提取日期维度作为去重判定条件:

# 先提取纯日期字段作为去重判定维度
df["visit_date"] = df["seen"].dt.date
# 去重后可按需删除新增的visit_date字段
df_filtered = df.sort_values("seen").drop_duplicates(
    subset=["id", "visit_date"],
    keep="first"
).drop(columns="visit_date")

实现原理

drop_duplicates的subset参数用于指定判断重复的列组合,只有这些列的取值完全一致时才会被判定为重复项。上述两种写法中,同个id在不同日期的记录因为日期维度字段取值不同,不会被判定为重复,因此不会被误删,完全匹配单天去重的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:57:03