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为NaNrolling(2).mean():计算2日滚动均值
droplevel(0):移除分组产生的外层id索引,让结果结构更简洁(若需保留双层索引可删除此步骤)
内容的提问来源于stack exchange,提问作者zzzbbx
相关产品推荐
相关产品推荐

