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

Pandas按分组计算日期扩展窗口均值并补全缺失日期值的实现方法

分组时序扩展窗口均值计算及补全方案

优化扩展均值计算逻辑

原有两次分组聚合的写法可以简化为单次聚合,减少计算开销,和原有逻辑结果完全一致,代码如下:

import pandas as pd

# 预处理:将日期转为datetime格式,按分组+日期排序保证时序正确性
df_example['date'] = pd.to_datetime(df_example['date'])
df_example = df_example.sort_values(['group', 'date']).reset_index(drop=True)

# 单次按分组+日期聚合,同时计算总和、计数
date_agg = df_example.groupby(['group', 'date'])['val'].agg(['sum', 'count'])
# 分组累加后直接计算均值
expanding_mean = date_agg.groupby('group').cumsum().eval('val = sum / count')[['val']]

补全全量日期序列

要实现所有分组覆盖完整日期、缺失日期沿用最近结果的需求,可以通过重索引+向前填充实现,代码如下:

# 取全局所有出现过的日期作为完整日期序列
all_dates = df_example['date'].unique()

# 反压栈分组维度、重索引补全日期、向前填充缺失值、恢复索引结构
full_result = expanding_mean.unstack('group')\
                .reindex(all_dates)\
                .ffill()\
                .stack('group')\
                .swaplevel()\
                .sort_index()

多指标适配说明

如果需要同时计算多个指标的扩展均值,只需修改聚合逻辑即可,无需调整整体流程:

# 假设存在val1、val2两个需要计算的指标
date_agg = df_example.groupby(['group', 'date'])[['val1', 'val2']].agg(['sum', 'count'])
cumsum_agg = date_agg.groupby('group').cumsum()

# 批量计算所有指标的扩展均值
for col in ['val1', 'val2']:
    cumsum_agg[col] = cumsum_agg[(col, 'sum')] / cumsum_agg[(col, 'count')]
expanding_mean = cumsum_agg[[col for col in ['val1', 'val2']]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:45:01