gpt4 book ai didi

python - 如何获取多列分组后的移动窗口平均值

转载 作者:行者123 更新时间:2023-12-01 06:55:48 24 4
gpt4 key购买 nike

首先,我想按列进行分组:namegroupplace。然后,我想获取相邻两个月的平均值y。最后,我想将平均值添加到原始数据帧。

原始数据帧:

import pandas as pd
df = pd.DataFrame({"name":["Amy", "Amy", "Amy", "Bob", "Bob", "Bob", "Bob", "Bob", "Bob"],
"group":[1, 1, 1, 1, 1, 1, 2, 2, 2],
"place":['a', 'a', "a", 'b', 'b', 'b', 'b', 'b', 'b' ],
"yearmonth": ["2019-01", "2019-02", "2019-03", "2019-01", "2019-02", "2019-03", "2019-01", "2019-02", "2019-03"],
"y":[1, 2, 3, 1, 2, 0, 2, 0, 0]
})

print(df)

数据框:

name  group place yearmonth  y
0 Amy 1 a 2019-01 1
1 Amy 1 a 2019-02 2
2 Amy 1 a 2019-03 3
3 Bob 1 b 2019-01 1
4 Bob 1 b 2019-02 2
5 Bob 1 b 2019-03 0
6 Bob 2 b 2019-01 2
7 Bob 2 b 2019-02 0
8 Bob 2 b 2019-03 0

预期结果:

name  group place yearmonth  y   average_2months
0 Amy 1 a 2019-01 1 nan
1 Amy 1 a 2019-02 2 1.5
2 Amy 1 a 2019-03 3 2.5
3 Bob 1 b 2019-01 1 nan
4 Bob 1 b 2019-02 2 1.5
5 Bob 1 b 2019-03 0 1.0
6 Bob 2 b 2019-01 2 nan
7 Bob 2 b 2019-02 0 1.0
8 Bob 2 b 2019-03 0 0.0

我尝试过的:

现在我现在如何获取相邻两个月的平均值。但是,我不知道如何将其添加到原始数据框中。

tmp = df.groupby(['name', 'group', 'place'])['y'].rolling(2).mean()
print(tmp)

tmp:

name  group  place   
Amy 1 a 0 NaN
1 1.5
2 2.5
Bob 1 b 3 NaN
4 1.5
5 1.0
2 b 6 NaN
7 1.0
8 0.0
Name: y, dtype: float64

最佳答案

第四级索引是你原来的索引

df['new']=temp.reset_index(level=[0,1,2], drop=True)

关于python - 如何获取多列分组后的移动窗口平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58811799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com