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

使用Pandas按ID和日期去重:保留最大Timestamp记录

保留同一ID对应日期中Timestamp最大记录的实现方案

需求说明

同一ID下存在同一日期的多条重复记录,需保留每个ID对应日期中Timestamp最大的记录,删除其余重复项。

示例输入数据

id|timestamp|value
--|---------|-----
1|2022-04-19T18:46:36.259+0000|xyz
1|2022-04-19T18:46:36.302+0000|xyz
1|2022-04-19T18:46:36.357+0000|xyz
1|2022-04-24T00:41:40.871+0000|xyz
1|2022-04-24T00:41:40.879+0000|xyz
1|2022-05-02T10:15:25.829+0000|xyz
1|2022-05-02T10:15:25.832+0000|xyz

(注:原示例中2022-04-24的timestamp格式存在错误,已将秒后的冒号改为标准格式的点号)

目标输出数据

id|timestamp|value
--|---------|-----
1|2022-04-19T18:46:36.357+0000|xyz
1|2022-04-24T00:41:40.879+0000|xyz
1|2022-05-02T10:15:25.832+0000|xyz

解决方案

方案1:Python Pandas实现

通过时间格式转换+分组筛选,保留每组中时间戳最大的记录:

import pandas as pd

# 读取数据(假设数据为csv格式,分隔符为|)
df = pd.read_csv('data.csv', sep='|')

# 将timestamp列转换为可识别的datetime类型
df['timestamp'] = pd.to_datetime(df['timestamp'], format='%Y-%m-%dT%H:%M:%S.%f%z')

# 方法1:排序后分组取第一条(降序排序后第一条即为最大时间戳)
result = df.sort_values('timestamp', ascending=False).groupby(['id', df['timestamp'].dt.date]).first().reset_index(drop=False)

# 方法2:用transform生成掩码直接筛选
max_ts = df.groupby(['id', df['timestamp'].dt.date])['timestamp'].transform('max')
result = df[df['timestamp'] == max_ts]

# 输出结果(可选)
print(result.to_csv(sep='|', index=False))

方案2:SQL实现

利用窗口函数ROW_NUMBER()分区排序,筛选每组中时间戳最大的记录:

WITH ranked_records AS (
    SELECT
        id,
        timestamp,
        value,
        -- 按id和日期分组,时间戳降序排序生成行号
        ROW_NUMBER() OVER (
            PARTITION BY id, DATE(timestamp)
            ORDER BY timestamp DESC
        ) AS row_num
    FROM your_table_name
)
-- 取行号为1的记录,即每组中时间戳最大的条目
SELECT id, timestamp, value
FROM ranked_records
WHERE row_num = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:01:15