接下来 N 个元素的滚动总和,包括当前元素
Rolling sum of the next N elements, including the current element
早上好,
我有以下数据框:
a = [1,2,3,4,5,6]
b = pd.DataFrame({'a': a})
我想创建一个列,对 "a" 列的 接下来 "n" 行 求和,包括现值的一个;我试过了:
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
pandas >= 1.1
Pandas 现在支持“前瞻性 window 操作”,参见 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
请注意,对于日期时间滚动操作,这仍然(在撰写本文时)有很多错误 - 请谨慎使用。
pandas <= 1.0.X
如果没有内置支持,您可以通过先反转数据来获得输出,使用 rolling_sum
和 min_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
早上好,
我有以下数据框:
a = [1,2,3,4,5,6]
b = pd.DataFrame({'a': a})
我想创建一个列,对 "a" 列的 接下来 "n" 行 求和,包括现值的一个;我试过了:
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
pandas >= 1.1
Pandas 现在支持“前瞻性 window 操作”,参见 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
请注意,对于日期时间滚动操作,这仍然(在撰写本文时)有很多错误 - 请谨慎使用。
pandas <= 1.0.X
如果没有内置支持,您可以通过先反转数据来获得输出,使用 rolling_sum
和 min_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