如何在熊猫数据框中创建滑动窗口并应用函数

Posted

技术标签:

【中文标题】如何在熊猫数据框中创建滑动窗口并应用函数【英文标题】:how to create a sliding window and apply functions in pandas dataframes 【发布时间】:2019-09-17 12:13:53 【问题描述】:

我有以下数据框:

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

【问题讨论】:

你想要df.set_index('Time').rolling(3)['A'].mean() @Erfan - 有by = 2 所以看起来更复杂 你能提供预期的输出吗? @Erfan 对代码进行了编辑 【参考方案1】:

您可以执行以下操作:

    使用DataFrame.rolling 计算滚动平均值和最大值 将它们分配为新列 通过检查 remainder == 1 是否意味着它是一个奇数来获取每个第二个索引行 对于步骤 3 中的每个索引,将 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

【讨论】:

以上是关于如何在熊猫数据框中创建滑动窗口并应用函数的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:在数据框中创建一个新列,该列是滚动窗口的函数

使用 Keras 评估滑动窗口中的函数

滑动动画切换窗口或容器组件

如何使用集合编辑器窗口在 GroupBox 中创建文本框?

第二十六节,滑动窗口和 Bounding Box 预测

SQL滑动窗口聚合(不使用窗口函数)