【问题标题】:Pandas : Cumulative sum with moving window (following and preceding rows)Pandas:移动窗口的累积和(前后行)
【发布时间】:2019-01-21 09:47:16
【问题描述】:

我有以下数据集:

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()

【问题讨论】:

  • 对不起,问这个 - 为什么第二个值是 160 而第三个值变成 260?其背后的逻辑是什么?
  • 第一个期望值是 sum(sales 从开始到 201301) = 60。第二个期望值是 sum(sales 从开始到 201302) = 160,因为 201301 的销售额是 100。然后第三个值是 260,因为我添加了 201302 等的 100 个销售额

标签: python pandas cumsum


【解决方案1】:

使用cumsum 直接感谢shift by 11,而不是使用ffill 用以前的值填充NaNs:

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

【讨论】:

    猜你喜欢
    • 2020-04-30
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2023-03-04
    • 2021-12-01
    • 2020-11-17
    • 2017-05-16
    相关资源
    最近更新 更多