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

熊猫:移动窗口的累计和(以下和前几行)

  •  1
  • Vincent  · 技术社区  · 6 年前

    我有以下数据集:

    date     sales
    201201   5
    201202   5
    201203   5
    201204   5
    201205   5
    201206   5
    201207   5
    201208   5
    201209   5
    201210   5
    201211   5
    201212   5
    201301   100
    201302   100
    

    我想计算销售的累积和,从 开始 实际日期+12个月

    所以这里:

    date     sales   expected
    201201   5       60
    201202   5       160
    201203   5       260
    201204   5       260 
    201205   5       260
    201206   5       260
    201207   5       260
    201208   5       260
    201209   5       260
    201210   5       260
    201211   5       260
    201212   5       260
    201301   100     260
    201302   100     260
    

    根据这个问题 How to compute cumulative sum of previous N rows in pandas? 我试过:

    df['sales'].rolling(window=12).sum()
    

    然而,我在寻找更像这样的东西:

    df['sales'].rolling(window=['unlimited preceding, 11 following']).sum()
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   U13-Forward    6 年前

    使用 cumsum 直接感谢 shift 通过 11 比使用 ffill 填补 NaN 具有上一个值的s:

    df['expected'] = df['sales'].cumsum().shift(-11).ffill()
    

    现在:

    print(df)
    

    是:

          date  sales  expected
    0   201201      5      60.0
    1   201202      5     160.0
    2   201203      5     260.0
    3   201204      5     260.0
    4   201205      5     260.0
    5   201206      5     260.0
    6   201207      5     260.0
    7   201208      5     260.0
    8   201209      5     260.0
    9   201210      5     260.0
    10  201211      5     260.0
    11  201212      5     260.0
    12  201301    100     260.0
    13  201302    100     260.0