如何计算熊猫前 N 行的累计和?

新手上路,请多包涵

我正在和熊猫一起工作,但我没有那么多经验。我有以下数据框:

           A
0       NaN
1      0.00
2      0.00
3      3.33
4     10.21
5      6.67
6      7.00
7      8.27
8      6.07
9      2.17
10     3.38
11     2.48
12     2.08
13     6.95
14     0.00
15     1.75
16     6.66
17     9.69
18     6.73
19     6.20
20     3.01
21     0.32
22     0.52

我需要计算前 11 行的累计和。当前面少于 11 个时,剩余的都假定为 0。

         B
0     NaN
1    0.00
2    0.00
3    0.00
4    3.33
5    13.54
6    20.21
7    27.20
8    35.47
9    41.54
10    43.72
11   47.09
12   49.57
13   51.65
14   58.60
15   58.60
16   57.02
17   53.48
18   56.49
19   56.22
20   54.16
21   51.10
22   49.24

我努力了:

 df['B'] = df.A.cumsum().shift(-11).fillna(0)

然而,这并没有达到我想要的效果,而是旋转了一个累加和的结果。我怎样才能做到这一点?

原文由 lmiguelvargasf 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 435
2 个回答

呼叫 rollingmin_periods=1window=11sum

 In [142]:
df['A'].rolling(min_periods=1, window=11).sum()

Out[142]:
0       NaN
1      0.00
2      0.00
3      3.33
4     13.54
5     20.21
6     27.21
7     35.48
8     41.55
9     43.72
10    47.10
11    49.58
12    51.66
13    58.61
14    55.28
15    46.82
16    46.81
17    49.50
18    47.96
19    48.09
20    48.93
21    45.87
22    43.91
Name: A, dtype: float64

原文由 EdChum 发布,翻译遵循 CC BY-SA 3.0 许可协议

检查 pandas.Series.expandingseries.expanding(min_periods=2).sum()

会为你完成这项工作。并且不要忘记设置第 0 个元素,因为它是 NaN 。我是说,

 accumulation = series.expanding(min_periods=2).sum()
accumulation[0] = series[0] # or as you like

原文由 Levon Minasian 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题