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

Pandas如何对含缺失日期的分组数据计算近2天滚动求和

Pandas分组补全日期并计算2天滑动总和的实现方法

该需求用Pandas原生向量化操作即可高效实现,无需自定义循环,对百万级以上数据也能保持很好的处理性能,完整实现代码如下:

import pandas as pd

# 构造原始数据
data = {
    "group_name": ["A","A","A","A","A","B","B","B"],
    "group_date": ["2021-01-01","2021-01-02","2021-01-03","2021-01-04","2021-01-05","2021-01-01","2021-01-04","2021-01-05"],
    "value": [1,5,3,1.5,3,1,2,9]
}
df = pd.DataFrame(data)

# 1. 日期列转datetime类型,设置为索引适配resample操作
df['group_date'] = pd.to_datetime(df['group_date'])
df = df.set_index('group_date')

# 2. 按group_name分组,补全每个分组内的连续日期,缺失日期的value默认填充为0
df_full = df.groupby('group_name').resample('D').agg({'value':'sum'}).reset_index()

# 3. 分组计算包含当日在内的过去2天value总和,不足2天的首条数据自动返回NaN
df_full['value'] = df_full.groupby('group_name')['value'].rolling(window=2, min_periods=2).sum().reset_index(drop=True)

# 输出结果
print(df_full)

核心操作说明

  • 日期预处理:转datetime类型+设置为时间索引是Pandas时间序列操作的基础,能保证后续resample、rolling的计算准确性
  • 分组补全日期:groupby('group_name').resample('D')会自动为每个分组生成从最小日期到最大日期的连续天级数据,无数据的日期sum聚合返回0,刚好匹配缺失值补0的需求
  • 滑动求和:rolling(window=2, min_periods=2)指定窗口大小为2天,且必须满2个有效值才计算,天然实现首条数据返回NaN的要求

运行上述代码得到的输出与你期望的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:36:02