代码之家  ›  专栏  ›  技术社区  ›  KOB

下n行的总和

  •  3
  • KOB  · 技术社区  · 6 年前

    我有一个如下所示的数据帧:

                 ds         y
    0    2017-02-07  0.154941
    1    2017-02-08  0.110595
    2    2017-02-09  0.044022
    3    2017-02-10  0.283902
    4    2017-02-11  0.121570
    5    2017-02-12  0.000000
    6    2017-02-13  0.020265
    7    2017-02-14  0.053577
    8    2017-02-15  0.080842
    9    2017-02-16  0.022043
    

    y 当前日期后接下来3天的值。

    我通过以下方式实现这一目标:

    df['next_3'] = df['y'].shift(-3).rolling(3).sum()
    

    这就产生了:

               ds         y     label
    0  2017-02-07  0.154941       NaN
    1  2017-02-08  0.110595       NaN
    2  2017-02-09  0.044022  0.405472
    3  2017-02-10  0.283902  0.141836
    4  2017-02-11  0.121570  0.073842
    5  2017-02-12  0.000000  0.154685
    6  2017-02-13  0.020265  0.156462
    7  2017-02-14  0.053577       NaN
    8  2017-02-15  0.080842       NaN
    9  2017-02-16  0.022043       NaN
    

    我明白为什么最后三排有 NaN 后面3行中的值不可用,但为什么前2行中的值不可用 什么时候可以计算这些值?

    我怎样才能纠正我的错误 shift().rolling().sum() 调用,以便也计算前两行?

    1 回复  |  直到 6 年前
        1
  •  10
  •   jezrael    6 年前

    使用参数 min_periods=1

    df['next_3'] = df['y'].shift(-3).rolling(3, min_periods=1).sum()
    print (df)
               ds         y    next_3
    0  2017-02-07  0.154941  0.283902
    1  2017-02-08  0.110595  0.405472
    2  2017-02-09  0.044022  0.405472
    3  2017-02-10  0.283902  0.141835
    4  2017-02-11  0.121570  0.073842
    5  2017-02-12  0.000000  0.154684
    6  2017-02-13  0.020265  0.156462
    7  2017-02-14  0.053577  0.102885
    8  2017-02-15  0.080842  0.022043
    9  2017-02-16  0.022043       NaN
    

    或先使用滚动,然后使用换档:

    df['next_3'] = df['y'].rolling(3).sum().shift(-3)
    print (df)
               ds         y    next_3
    0  2017-02-07  0.154941  0.438519
    1  2017-02-08  0.110595  0.449494
    2  2017-02-09  0.044022  0.405472
    3  2017-02-10  0.283902  0.141835
    4  2017-02-11  0.121570  0.073842
    5  2017-02-12  0.000000  0.154684
    6  2017-02-13  0.020265  0.156462
    7  2017-02-14  0.053577       NaN
    8  2017-02-15  0.080842       NaN
    9  2017-02-16  0.022043       NaN