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

Pandas分组填充缺失日期并使用聚合函数报错求助

问题解决:分组填充缺失日期并计算滚动均值

错误原因

你遇到的AttributeError是因为groupby('id')返回的是DataFrameGroupBy对象,这个对象没有set_index方法,无法直接链式调用该方法。必须对每个分组单独执行索引设置和重采样操作。

修正代码

以下是实现需求的正确代码,按id分组后补全每日缺失日期,再计算2日滚动均值:

import pandas as pd

df = pd.DataFrame({'date': ['2014-08-01',
                            '2014-08-02', 
                            '2014-08-03',
                            '2014-08-04',
                            '2014-08-10',
                            '2014-08-15',
                            '2014-08-12',
                            '2014-08-15',
                            '2014-08-20',
                            '2014-08-21',
                            '2014-08-22',                            
                            '2014-08-30',                            
                           ], 
                   'value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], 
                   'id': ['a', 'a', 'a', 'a', 'a', 'a',  'b', 'b', 'b', 'b', 'b', 'b']})

df['date'] = pd.to_datetime(df['date'])
df.sort_values(['id', 'date'], inplace=True)

# 对每个分组执行补全日期+滚动均值操作
result = df.groupby('id').apply(
    lambda x: x.set_index('date').resample('1D').asfreq().rolling(2).mean()
).droplevel(0)  # 去掉多余的id索引层级,按需保留

print(result)

代码说明

  • 先按id和date排序,确保分组内日期有序
  • 使用groupby.apply对每个分组单独处理:
    • set_index('date'):将日期设为分组内的索引
    • resample('1D').asfreq():按天重采样,自动填充缺失日期对应的value为NaN
    • rolling(2).mean():计算2日滚动均值
  • droplevel(0):移除分组产生的外层id索引,让结果结构更简洁(若需保留双层索引可删除此步骤)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:32:49