【问题标题】:Rolling sum of the next N elements, including the current element下 N 个元素的滚动和,包括当前元素
【发布时间】:2018-09-26 00:41:20
【问题描述】:

早安,

我有以下数据框:

a = [1,2,3,4,5,6]
b = pd.DataFrame({'a': a})   

我想创建一个列,对列“a”的下“n”行求和,包括 a 的现值;我试过了:

n = 2
b["r"] = pd.rolling_sum(b.a, n) + a 
print(b)
   a     r
0  1   NaN
1  2   5.0
2  3   8.0
3  4  11.0
4  5  14.0
5  6  17.0

如果有的话会很高兴:

   a     r
0  1   1 + 2 + 3 = 6
1  2   2 + 3 + 4 = 9
2  3   3 + 4 + 5 = 12
3  4   4 + 5 + 6 = 15
4  5   5 + 6 + 0 = 11
5  6   6 + 0 + 0 = 6

【问题讨论】:

标签: python pandas rolling-sum


【解决方案1】:

熊猫 >= 1.1

Pandas 现在支持“前瞻性窗口操作”,请参阅here

从 1.1 开始,您可以使用FixedForwardWindowIndexer

idx = pd.api.indexers.FixedForwardWindowIndexer
b['a'].rolling(window=idx(window_size=3), min_periods=1).sum()

0     6.0
1     9.0
2    12.0
3    15.0
4    11.0
5     6.0
Name: a, dtype: float64

请注意,这对于日期时间滚动操作仍然(在撰写本文时)非常有问题 - 请谨慎使用。


熊猫

如果没有内置支持,您可以先反转数据,使用 rolling_summin_periods=1,然后再次反转来获得输出。

b.a[::-1].rolling(3, min_periods=1).sum()[::-1]

0     6.0
1     9.0
2    12.0
3    15.0
4    11.0
5     6.0
Name: a, dtype: float64

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-28
    • 2021-11-25
    • 2011-04-18
    • 2015-03-27
    • 2016-02-18
    • 2018-12-03
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多