取Pandas系列中每N行的和

2024-05-23 14:45:26 发布

您现在位置:Python中文网/ 问答频道 /正文

假设

s = pd.Series(range(50))

0      0
1      1
2      2
3      3
...
48     48
49     49

我怎样才能得到由n行和组成的新序列?

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

0      10
1      35
2      60
3      85
...
8      210
9      235

如果python使用loc或iloc和loop,当然可以完成,但是我相信可以简单地用Pandas的方式完成。

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


Tags: 数据looppandas方式时间事件range序列
1条回答
网友
1楼 · 发布于 2024-05-23 14:45:26

GroupBy.sum

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

将索引分成5组并相应地分组。


numpy.reshape+sum

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

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

numpy.add.at

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.])

相关问题 更多 >