python - 滚动时更改滚动窗口大小
问题描述
我有一个像这样的熊猫数据框;
>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
: :
我想创建一个新列roll_speed
,其中需要最后 5 个位置的滚动平均速度。但我想把更详细的条件放在里面。
- Groupby
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 : :
我的尝试:
df['roll_speed'] = df.speed.rolling(5).mean()
但它只为可用于计算的行少于五行的行返回 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
推荐阅读
- powershell - Get-AdUser 不接受变量
- typescript - 如何使用 MobX 状态树模型作为 TypeScript 的函数参数?
- visual-studio - Visual Studio 安装程序无法运行
- java - 在Eclipse中定义maven插件使用的JRE
- c++ - 为什么 Visual Studio 在没有优化的情况下正确编译此函数,但在优化时编译错误?
- typescript - 打字稿联合类型和推断不同的属性而无需额外的类型检查
- sql - 为什么“AND NOT field = 'value'”会过滤掉空值?
- php - 更改 Avada fusion_portfolio_grid_title HTML 标记
- javascript - 没有显示带有 video-js 的播放速度控制?
- coldfusion - Lucee ColdFusion.Ajax.submitForm