如何基于固定日期列表对pandas时间序列执行groupby聚合操作
固定月度日期区间的时间序列分组聚合方案
我们可以通过pd.cut为时间序列的每个索引匹配对应分组区间,再基于分组标签做矢量化聚合,比循环实现效率更高、代码更简洁。
完整实现代码
import pandas as pd import numpy as np # 原始数据构造 dates = pd.date_range('1/1/2004', periods=365, freq="D") ts = pd.Series(np.random.randint(0,101, 365), index=dates) # 生成分组边界 group_bounds = dates[dates.day.isin([1,8,16,24])] # 补充末尾边界,覆盖整个时间序列的最后一段区间 group_bounds = group_bounds.append(pd.Index([dates[-1] + pd.Timedelta(days=1)])) # 生成每个日期对应的分组标签 group_keys = pd.cut(ts.index, bins=group_bounds, right=False, labels=group_bounds[:-1]) # 按分组聚合计算所需指标 result = ts.groupby(group_keys).agg(['sum', 'max', 'min'])
实现说明
pd.cut的right=False参数指定区间为左闭右开[起始日期, 结束日期),和你原始循环的判断逻辑完全一致- 分组标签默认取区间的起始日期,可直接识别每个分组对应的时间段
- 天然兼容不同月份天数差异、闰年场景,因为分组边界完全基于你指定的每月固定日期生成,和月份长度无关
- 调整
agg方法的入参即可灵活扩展需要计算的聚合指标,无需修改分组逻辑
内容的提问来源于stack exchange,提问作者Cursore
相关产品推荐
相关产品推荐

