如何创建滑动窗口并在pandas数据框中应用功能

时间:2019-09-17 12:13:53

标签: python pandas dataframe window-functions pandasql

我有以下数据框:

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列应用某些服装函数(为了说明本示例的均值和最大值)

与之等效的

 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

或没有NAs

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

  1. 使用DataFrame.rolling计算滚动平均值和最大值
  2. 将它们分配为新列
  3. 通过检查runCatching是否表示数字不均匀来获取第二个索引行
  4. 对于步骤3中的每个索引,将.loc分配给remainder == 1
NaN

输出

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