原始数据集:
index = pd.MultiIndex.from_product([['AAA','BBB'], pd.DatetimeIndex(['2017-08-17', '2017-08-20', '2017-09-08'])])
df = pd.DataFrame(data=[[1.0], [3.0], [5.0], [7.0], [9.0], [11.0]], index=index, columns=['foo'])
重新索引数据框,以便能够使用居中的滚动窗口(使索引统一)。
df = df.reindex(pd.MultiIndex.from_product([['AAA','BBB'], pd.date_range('2017-08-15', '2017-09-10')]))
df.head(10)
以下代码按预期工作。
df['foo'].groupby(level=0, group_keys=False).rolling(7, min_periods=1, center=True).mean().head(10)
AAA 2017-08-15 1.0
2017-08-16 1.0
2017-08-17 2.0
2017-08-18 2.0
2017-08-19 2.0
2017-08-20 2.0
2017-08-21 3.0
2017-08-22 3.0
2017-08-23 3.0
2017-08-24 NaN
Name: foo, dtype: float64
但如果我尝试使用聚合,则会引发错误。
df['foo'].groupby(level=0, group_keys=False).rolling(7, min_periods=1, center=True).agg(['mean', 'count'])
KeyError: 'Column not found: foo'
Stacktrace:https://pastebin.com/fV24HCQ7