Mak*_*aki 5 python average pandas rolling-average
我有一个这样的熊猫数据框;
>df
leg speed
1 10
1 11
1 12
1 13
1 12
1 15
1 19
1 12
2 10
2 10
2 12
2 15
2 19
2 11
: :
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列roll_speed,该列需要最近5个位置的滚动平均速度。但我想在其中添加更详细的条件。
leg(它没有考虑到不同行中行的速度leg。我希望根据可用的行将滚动窗口从1个最大值更改为5个最大值。例如leg == 1,在第一行中,只有一行要计算,因此滚动速度应为10/1 = 10。对于第二行,只有两行可用于计算,轧制速度应为(10+11)/2 = 10.5。
leg speed roll_speed
1 10 10 # 10/1
1 11 10.5 # (10+11)/2
1 12 11 # (10+11+12)/3
1 13 11.5 # (10+11+12+13)/4
1 12 11.6 # (10+11+12+13+12)/5
1 15 12.6 # (11+12+13+12+15)/5
1 19 14.2 # (12+13+12+15+19)/5
1 12 14.2 # (13+12+15+19+12)/5
2 10 10 # 10/1
2 10 10 # (10+10)/2
2 12 10.7 # (10+10+12)/3
2 15 11.8 # (10+10+12+15)/4
2 19 13.2 # (10+10+12+15+19)/5
2 11 13.4 # (10+12+15+19+11)/5
: :
Run Code Online (Sandbox Code Playgroud)我的尝试:
df['roll_speed'] = df.speed.rolling(5).mean()
Run Code Online (Sandbox Code Playgroud)
但是,对于可用于计算的少于五行的行,它仅返回NA。我应该如何解决这个问题?感谢您的任何帮助!
将参数min_periods设置为1
df['roll_speed'] = df.groupby('leg').speed.rolling(5, min_periods = 1).mean()\
.round(1).reset_index(drop = True)
leg speed roll_speed
0 1 10 10.0
1 1 11 10.5
2 1 12 11.0
3 1 13 11.5
4 1 12 11.6
5 1 15 12.6
6 1 19 14.2
7 1 12 14.2
8 2 10 10.0
9 2 10 10.0
10 2 12 10.7
11 2 15 11.8
12 2 19 13.2
13 2 11 13.4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
507 次 |
| 最近记录: |