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

如何在Pandas DataFrame中高效分组获取最大/最小时间戳

高效实现Pandas按ID分组求时间戳的最大/最小值

嗨,针对你遇到的分组求时间戳极值效率低的问题,我给你推荐一个更高效的解决方案,比你当前用的sort_values+drop_duplicates方法性能提升很多,尤其是在数据集较大的时候。

问题分析

你当前的方法需要先对全表的时间戳排序,再去重保留首尾记录,这种方式的时间复杂度是O(n log n)(因为排序的开销),当数据量很大时,效率会显著下降。而我们可以直接利用Pandas的分组聚合功能,只对每个分组计算极值,时间复杂度是O(n),性能更优。

高效实现代码

首先确保你的timestamp列是datetime类型(如果还没转换的话,这一步很重要,否则字符串类型的极值计算会出错),然后用groupby结合agg直接计算每个分组的最大和最小时间戳:

import pandas as pd

# 构造你的示例数据
df = pd.DataFrame({
    'id': [1, 2, 1, 1, 2],
    'timestamp': [
        '2017-09-17 10:09:01',
        '2017-10-02 01:13:15',
        '2017-09-17 10:53:07',
        '2017-09-17 10:52:18',
        '2017-09-12 21:59:40'
    ]
})

# 转换timestamp为datetime类型(如果你的原始数据还没做这一步)
df['timestamp'] = pd.to_datetime(df['timestamp'])

# 核心分组聚合操作
result = df.groupby('id')['timestamp'].agg(['max', 'min']).reset_index()

# 输出结果
print(result)

输出结果

运行后你会得到和期望一致的结果:

id                 max                 min
0   1 2017-09-17 10:53:07 2017-09-17 10:09:01
1   2 2017-10-02 01:13:15 2017-09-12 21:59:40

额外性能优化

如果你的数据集非常大,还可以尝试加上sort=False参数(默认groupby会对分组键排序),跳过分组键排序的步骤,进一步提升性能:

result = df.groupby('id', sort=False)['timestamp'].agg(['max', 'min']).reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:01:09