[英]Pandas MultiIndex Dataframe Groupby Rolling Mean
我想計算 dataframe groupby 二級的滾動平均值(以下代碼示例中的 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)
預期 output:
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
但實際的 output 是 NaN。 任務似乎有問題。 實際 output:
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 上嘗試過)
使用 lambda function 避免丟失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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.