我试图生成col3
的滚动2平均值(按col2
分组)。我所遇到的困难是填充NaN
值,以获取先前计算的滚动平均值。
数据框:
df = pd.read_csv(StringIO("""col1,col2,col3
0,A,1
0,A,2
0,B,3
0,B,4
1,A,5
1,A,6
1,B,7
1,B,8
2,A,9
2,A,10
2,B,11
2,B,12
3,A
3,A
3,B
3,B
4,A
4,A
4,B
4,B
"""))
已尝试:
df.groupby(["col2"])["col3"].rolling(2).mean()
col2
A 0 NaN
1 1.5
4 3.5
5 5.5
8 7.5
9 9.5
12 NaN
13 NaN
16 NaN
17 NaN
B 2 NaN
3 3.5
6 5.5
7 7.5
10 9.5
11 11.5
14 NaN
15 NaN
18 NaN
19 NaN
我想要什么(以A
为例):
col1 col2 col3
0 A 1.0
0 A 2.0
0 B 3.0
0 B 4.0
1 A 5.0
1 A 6.0
1 B 7.0
1 B 8.0
2 A 9.0
2 A 10.0
2 B 11.0
2 B 12.0
3 A NaN # (10 + 9) / 2 = 9.5
3 A NaN # (9.5 + 10) / 2 = 9.75
3 B NaN # ...
3 B NaN
4 A NaN # (9.75 + 9.5) / 2 = 9.625
4 A NaN # (9.625 + ...)
4 B NaN
4 B NaN
如果我们可以偏移滚动平均值,从第一个NaN
开始,那就太好了。
如果这不能用rolling
来完成,那么愿意使用for循环解决方案吗?
1条答案
按热度按时间nvbavucw1#
您可以尝试以下操作: