我想计算第二层数据帧分组的滚动平均值(以下代码示例中的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 +熊猫1.2.1。(也尝试使用Python 3.7.9 + Pandas 1.1.5)
使用lambda函数来避免丢失MultiIndex
,因此分配工作正常:
df['MA'] = df.groupby('Key2')['Value'].apply(lambda x: x.rolling(window=3).mean())
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句