1 回答

TA贡献1827条经验 获得超9个赞
可以,但是首先获得或NaN的rolling:
df['a'] = df['Numbers'].rolling(10).sum()
print (df)
Numbers a
0 1 NaN
1 2 NaN
2 3 NaN
3 4 NaN
4 5 NaN
5 6 NaN
6 7 NaN
7 8 NaN
8 9 NaN
9 10 55.0
10 11 65.0
11 12 75.0
12 13 85.0
df['a'] = df['Numbers'].rolling(10).sum().shift(-9)
print (df)
Numbers a
0 1 55.0
1 2 65.0
2 3 75.0
3 4 85.0
4 5 NaN
5 6 NaN
6 7 NaN
7 8 NaN
8 9 NaN
9 10 NaN
10 11 NaN
11 12 NaN
12 13 NaN
或使用参数min_periods=1与间隔数1,1-2,1-3...为填充第一NaNS:
df['a'] = df['Numbers'].rolling(10, min_periods=1).sum()
print (df)
Numbers a
0 1 1.0
1 2 3.0
2 3 6.0
3 4 10.0
4 5 15.0
5 6 21.0
6 7 28.0
7 8 36.0
8 9 45.0
9 10 55.0
10 11 65.0
11 12 75.0
12 13 85.0
编辑:
如果有可能添加下一个价值观-这里的范围1来61那么可以创建滚动,然后删除最后NaNs行:
df = pd.DataFrame({'Numbers':range(1, 61)})
df['a'] = df['Numbers'].rolling(10).sum().shift(-9)
df = df.iloc[:50]
print (df)
Numbers a
0 1 55.0
1 2 65.0
2 3 75.0
3 4 85.0
4 5 95.0
5 6 105.0
6 7 115.0
7 8 125.0
8 9 135.0
9 10 145.0
10 11 155.0
11 12 165.0
12 13 175.0
13 14 185.0
14 15 195.0
15 16 205.0
16 17 215.0
17 18 225.0
18 19 235.0
19 20 245.0
20 21 255.0
21 22 265.0
22 23 275.0
23 24 285.0
24 25 295.0
25 26 305.0
26 27 315.0
27 28 325.0
28 29 335.0
29 30 345.0
30 31 355.0
31 32 365.0
32 33 375.0
33 34 385.0
34 35 395.0
35 36 405.0
36 37 415.0
37 38 425.0
38 39 435.0
39 40 445.0
40 41 455.0
41 42 465.0
42 43 475.0
43 44 485.0
44 45 495.0
45 46 505.0
46 47 515.0
47 48 525.0
48 49 535.0
49 50 545.0
添加回答
举报