我想计算数据框按第二层分组后的滚动均值(以下是代码示例中的Key2)。
import pandas as pd
d = {'Key1':[1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6], 'Key2':[2,7,8,5,3,2,7,5,8,7,2,9,8,3,9,2,7,9],'Value':[1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3]}
df = pd.DataFrame(d)
df = df.set_index(['Key1', 'Key2'])
df['MA'] = (df.groupby('Key2')['Value']
.rolling(window=3)
.mean()
.reset_index(level=0, drop=True))
print(df)
期望输出:
Value MA
Key1 Key2
1 2 1 NaN
7 2 NaN
8 3 NaN
2 5 1 NaN
3 2 NaN
2 3 NaN
3 7 1 NaN
5 2 NaN
8 3 NaN
4 7 1 1.333333
2 2 2.000000
9 3 NaN
5 8 1 2.333333
3 2 NaN
9 3 NaN
6 2 1 2.000000
7 2 1.333333
9 3 3.000000
但实际输出为 NaN。似乎赋值出了问题。
Value MA
Key1 Key2
1 2 1 NaN
7 2 NaN
8 3 NaN
2 5 1 NaN
3 2 NaN
2 3 NaN
3 7 1 NaN
5 2 NaN
8 3 NaN
4 7 1 NaN
2 2 NaN
9 3 NaN
5 8 1 NaN
3 2 NaN
9 3 NaN
6 2 1 NaN
7 2 NaN
9 3 NaN
Python 3.8 + Pandas 1.2.1。(也尝试了 Python 3.7.9 + Pandas 1.1.5)
Key2
中具有>=3
行的非NaN值。您可以将min_periods=1
传递给rolling(3, min_periods=1)
。这符合您的预期吗? - Quang Hoanggroupby().rolling().mean()
系列,看看是否需要使用reset_index
。 - Quang Hoang