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
相关产品推荐
相关产品推荐

