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

如何在Python中聚合Datetime索引时间差一致的Pandas DataFrame行

Pandas 连续子组聚合最优方案

核心使用Pandas向量化操作实现,无需循环,效率远高于自定义遍历方案。

前置准备

确保DataFrame索引为datetime类型,示例中假设值列名为value:

import pandas as pd

# 示例数据构造,你可以替换为自己的DataFrame
data = [1,2,3,4,10,12,14,20,10,5,2]
index = pd.to_datetime([
    "2020-06-09 08:44:00", "2020-06-09 08:46:00", "2020-06-09 08:48:00", "2020-06-09 08:50:00",
    "2020-06-09 09:06:00", "2020-06-09 09:08:00", "2020-06-09 09:10:00",
    "2020-06-09 10:14:00", "2020-06-09 10:16:00", "2020-06-09 10:18:00", "2020-06-09 10:20:00"
])
df = pd.DataFrame({"value": data}, index=index)

核心实现

步骤1:生成连续子组ID

计算相邻索引的时间差,间隔超过2分钟(120秒)即判定为新子组的起点,通过累加生成唯一子组标识:

# 计算相邻索引时间差,首行空值补0
time_diff = df.index.to_series().diff().dt.total_seconds().fillna(0)
# 生成子组ID
group_id = (time_diff > 120).cumsum()

步骤2:按子组聚合得到结果

每个子组计算均值,同时取子组最后一个时间戳作为结果的索引:

result = df.groupby(group_id).agg(
    value=("value", "mean"),
    dt=("index", "last")
).set_index("dt")

结果验证

输出result即可得到目标格式:

value
dt                        
2020-06-09 08:50:00   2.50
2020-06-09 09:10:00  12.00
2020-06-09 10:20:00   9.25

如果需要更换聚合逻辑(如求和、取最大值),仅需替换agg参数中的mean为对应聚合函数即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:48:04