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

Pandas DataFrame去重时保留分组内最早记录的实现方法

Pandas按分组取首次作答记录解决方案

方案1:先排序再去重(可行)

你提到的先按time排序再执行去重的思路完全可行,实现逻辑如下:

  • 首先对time字段做升序排序,确保每个分组下更早的记录排在前面
  • 再执行drop_duplicates保留每个分组的第一条记录
    代码示例:
# 按作答时间升序排序
df_sorted = df.sort_values(by='time', ascending=True)
# 按分组去重,保留第一条(即最早的)记录
deduped = df_sorted.drop_duplicates(subset=["name", "job", "question"], keep="first").reset_index(drop=True)

方案2:groupby取最小时间索引(更安全稳定)

更推荐用分组直接取最小时间对应行的方案,不需要调整全表顺序,逻辑更直接也更稳定,完全不受原数据顺序影响:

# 按分组获取每个分组下time最小的记录的索引
min_time_idx = df.groupby(['name', 'job', 'question'])['time'].idxmin()
# 根据索引提取对应行
deduped = df.loc[min_time_idx].reset_index(drop=True)

注意事项

你的time字段已经是datetime64[ns, UTC]类型,所有记录时区统一,直接比较大小、排序都不会有问题,不需要额外做时区转换处理。

内容来源stack exchange,提问作者futuredataengineer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:06:01