python - 如何在熊猫数据框中创建滑动窗口并应用函数
问题描述
我有以下数据框:
Time A
1 1
2 1
3 1
4 1
5 2
6 2
7 3
8 3
9 2
10 1
11 1
12 1
13 3
14 3
15 3
需要创建一个长度为 3 的滑动窗口,该窗口在时间列上滑动 2 步,并将一些服装功能应用于 A 列(为了这个例子,假设平均值和最大值)
它的 r 等价物是
dat %>% dplyr::mutate(SMA_A=rollapplyr(A, 3, mean ,by = 2,align ="center", partial=TRUE, fill=NA),
Max_A =rollapplyr(A, 3, max ,by=2, align ="center", partial=TRUE,fill=NA)
)
预期输出:
Time A SMA_A Max_A
1 1 1.000000 1
2 1 NA NA
3 1 1.000000 1
4 1 NA NA
5 2 1.666667 2
6 2 NA NA
7 3 2.666667 3
8 3 NA NA
9 2 2.000000 3
10 1 NA NA
11 1 1.000000 1
12 1 NA NA
13 3 2.333333 3
14 3 NA NA
15 3 3.000000 3
或没有 NA
解决方案
您可以执行以下操作:
- 计算滚动平均值和最大值
DataFrame.rolling
- 将它们分配为新列
remainder == 1
通过检查是否意味着它是奇数来获取每个第二个索引行- 对于 step3 中的每个索引,
NaN
分配.loc
df['A'] = df.rolling(3, center=True)['A'].mean().bfill().ffill()
df['Max_A'] = df.rolling(3, center=True)['A'].max().bfill().ffill()
mask_idx = df.index%2 == 1
df.loc[mask_idx, ['A', 'Max_A']] = np.NaN
输出
Time A Max_A
0 1 1.000000 1.0
1 2 NaN NaN
2 3 1.000000 1.0
3 4 NaN NaN
4 5 1.666667 2.0
5 6 NaN NaN
6 7 2.666667 3.0
7 8 NaN NaN
8 9 2.000000 3.0
9 10 NaN NaN
10 11 1.000000 1.0
11 12 NaN NaN
12 13 2.333333 3.0
13 14 NaN NaN
14 15 3.000000 3.0
推荐阅读
- sql - 创建与 SQL Server 存储过程的 Microsoft Excel 连接
- ios - 如何为 Google Cardboard 配置 React 360
- java - 打印上标字符在 Eclipse 中不起作用
- python - Opencv模板匹配不同大小的图片
- aurelia - 如何在 aurelia 组件中完全呈现自定义元素以进行 e2e 测试?
- mysql - 如何在zend框架3中使用动态数据连接到数据库
- java - {c++} Vertex* myList 和 {java} List myList 有什么相似之处?
- jquery - 带有 SVG 的旋转动画
- php - 使自定义帖子类型成为页面的子级
- firebase - 如何在 Firebase 上禁用 Crashlytics 电子邮件通知?