Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建滑动窗口并在数据帧中应用函数_Python_Pandas_Dataframe_Window Functions_Pandasql - Fatal编程技术网

Python 如何创建滑动窗口并在数据帧中应用函数

Python 如何创建滑动窗口并在数据帧中应用函数,python,pandas,dataframe,window-functions,pandasql,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列应用一些costment函数(为了

我有以下数据帧:

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列应用一些costment函数(为了这个示例,让我们假设mean和max)

它的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

或者不使用NAs,您可以执行以下操作:

  • 使用以下公式计算滚动平均值和最大值:
  • 将它们指定为新列
  • 通过检查
    余数==1
    来获取每2个索引行,这意味着它是一个不均匀数
  • 对于步骤3中的每个索引,使用
  • 输出

        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
    

    您需要
    df.set_index('Time').rolling(3)['A'].mean()
    ?@Erfan-这似乎更复杂。您可以提供预期的输出吗?@Erfan对代码进行了编辑
        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