我正在尝试在组内计算滚动平均值。为了完成这个任务,我想要从上面的行中得到滚动平均值,所以认为最简单的方法是使用shift()
,然后执行 rolling()
。问题是shift()
会将前一个组的数据移动,使组2和3中的第一行不正确。列 'ma' 应该在第4行和第7行具有 NaN。我该如何解决这个问题?
import pandas as pd
df = pd.DataFrame(
{"Group": [1, 2, 3, 1, 2, 3, 1, 2, 3],
"Value": [2.5, 2.9, 1.6, 9.1, 5.7, 8.2, 4.9, 3.1, 7.5]
})
df = df.sort_values(['Group'])
df.reset_index(inplace=True)
df['ma'] = df.groupby('Group', as_index=False)['Value'].shift(1).rolling(3, min_periods=1).mean()
print(df)
我得到了这个:
index Group Value ma
0 0 1 2.5 NaN
1 3 1 9.1 2.50
2 6 1 4.9 5.80
3 1 2 2.9 5.80
4 4 2 5.7 6.00
5 7 2 3.1 4.30
6 2 3 1.6 4.30
7 5 3 8.2 3.65
8 8 3 7.5 4.90
我尝试过几个类似问题的答案,但似乎都不起作用。