获取熊猫系列中每N行的总和

Hir*_*ori 9 python pandas

假设

s = pd.Series(range(50))

0      0
1      1
2      2
3      3
...
48     48
49     49
Run Code Online (Sandbox Code Playgroud)

如何获得由每n行总和组成的新系列?

当n = 5时,预期结果如下;

0      10
1      35
2      60
3      85
...
8      210
9      235
Run Code Online (Sandbox Code Playgroud)

如果使用loc或iloc并通过python循环,当然它可以完成,但我相信它可以简单地用Pandas方式完成.

另外,这是一个非常简单的例子,我不指望序列的解释:).我正在尝试的实际数据系列将时间索引和每秒发生的事件数作为值.

cs9*_*s95 18

GroupBy.sum + numpy.reshape

N = 5
s.groupby(s.index // N).sum()

0     10
1     35
2     60
3     85
4    110
5    135
6    160
7    185
8    210
9    235
dtype: int64
Run Code Online (Sandbox Code Playgroud)

将索引分为5组并相应分组.


sum + numpy.add.at

如果大小是N(或5)的倍数,您可以重塑并添加:

s.values.reshape(-1, N).sum(1)
# array([ 10,  35,  60,  85, 110, 135, 160, 185, 210, 235])
Run Code Online (Sandbox Code Playgroud)

GroupBy.sum

b = np.zeros(len(s) // N)
np.add.at(b, s.index // N, s.values)
b
# array([ 10.,  35.,  60.,  85., 110., 135., 160., 185., 210., 235.])
Run Code Online (Sandbox Code Playgroud)

  • @ user32185 当然!没有冒犯。而且我还添加了一个 numpy 解决方案,因为我很确定那会更快。 (2认同)