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

如何按天分组CSV行数据 实现同日重复testID去重保留最新记录

解决方案

不需要手动拆分每日子集循环处理,只需要在去重判断时加入「自然日」作为联合判定维度,即可一次完成全量数据清洗,不会误删跨日的同testID有效记录,对大型CSV文件的处理效率也更高。

实现步骤

  1. 基础数据预处理
    首先将时间列转为标准datetime格式,并按时间升序排序,保证同组内最后一条记录为时间最新的条目:

    import pandas as pd
    
    # 读取本地CSV文件
    df = pd.read_csv("你的测试数据文件路径.csv")
    # 转换date列为时间格式
    df["date"] = pd.to_datetime(df["date"])
    # 按时间正序排序,重置索引
    df = df.sort_values(by="date", ascending=True).reset_index(drop=True)
    
  2. 按规则去重
    我们把「自然日(年月日,不含时分秒)」和testID共同作为去重判定字段,这样去重范围会被严格限制在「同一天内的相同testID」,跨天的同testID记录因为自然日字段不同,不会被判定为重复:

    # 方法1:基于drop_duplicates实现,逻辑直观
    # 生成自然日辅助列
    df["day_tag"] = df["date"].dt.date
    # 去重:同天同testID仅保留最后一条(即时间最新的记录)
    df_clean = df.drop_duplicates(subset=["day_tag", "testID"], keep="last")
    # 删除不需要的辅助列
    df_clean = df_clean.drop(columns=["day_tag"]).reset_index(drop=True)
    

    如果你不想生成额外辅助列,也可以直接用分组取尾的方式实现,结果完全一致:

    # 方法2:基于groupby实现,无需额外辅助列
    df_clean = df.groupby([df["date"].dt.date, "testID"], as_index=False).tail(1)
    

效果验证

用给出的示例数据运行上述代码,最终输出结果完全符合规则要求:

  • 2022-05-31的两条A123记录,仅保留15:42:46的最新条目
  • 2022-06-01的A123记录属于不同自然日,正常保留
  • 其余无重复的testID记录全部留存

之前直接用testID作为单一去重字段的写法,本质是全局范围内同testID仅保留一条,自然会误删跨日的有效记录,加入自然日维度做联合判断后,就完全匹配业务规则了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:12:33