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

如何对pandas时间序列5分钟分桶后执行多字段分组求和计算

解决方案

首先你之前的时间转换有个小问题,ts_ms是毫秒级时间戳,需要指定unit='ms'才能得到正确的时间值。后续的分组逻辑需要把「5分钟时间桶」和a/b/c三个字段同时作为分组维度,再对x/y/z字段求和即可,完整代码如下:

import pandas as pd

# 1. 正确转换毫秒级时间戳为时间类型
df['ts_date'] = pd.to_datetime(df['ts_ms'], unit='ms')

# 2. 同时按5分钟时间桶、a、b、c三个字段分组,对x、y、z求和
# 注意你的列名带后缀点,要和实际列名保持一致,比如是a.就写'a.'
result = df.groupby([
    pd.Grouper(key='ts_date', freq='5Min'),
    'a.', 'b.', 'c.'
])[['x.', 'y.', 'z.']].sum().reset_index()

如果不需要在结果里保留时间桶字段,可以在最后加.drop('ts_date', axis=1)。

如果你的需求是先把所有数据按5分钟分桶,每个桶单独计算一次group by a,b,c sum(x,y,z),得到每个桶对应的聚合结果,可以用如下写法:

# 按5分钟分桶后,每个桶内单独执行分组聚合
bucket_results = []
for bucket_time, bucket_df in df.set_index('ts_date').groupby(pd.Grouper(freq='5Min')):
    agg_res = bucket_df.groupby(['a.', 'b.', 'c.'])[['x.', 'y.', 'z.']].sum().reset_index()
    # 可以给结果加个时间桶字段标识所属桶
    agg_res['bucket_time'] = bucket_time
    bucket_results.append(agg_res)

# 合并所有桶的结果
final_result = pd.concat(bucket_results, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:48:03