假设
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.reshapeN = 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.sumb = 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)