如何在熊猫中一次执行“n”行的求和?

时间:2017-08-05 19:17:03

标签: python pandas pandas-groupby

给定数据框

     A
0   14
1   59
2   38
3   40
4   99
5   89
6   70
7   64
8   84
9   40
10  30
11  94
12  65
13  29
14  48
15  26
16  80
17  79
18  74
19  69

此数据框有20列。我想一次分组n=5行并总结它们。所以,我的输出看起来像这样:

     A
0  250
1  347
2  266
3  328 

df.rolling_sum无济于事,因为它不允许你在求和时改变步幅。

还有其他方法吗?

3 个答案:

答案 0 :(得分:4)

df.set_index(df.index // 5).sum(level=0)

答案 1 :(得分:2)

假设您的索引是连续的,您可以在df.index上执行整数除法,然后按索引分组。

对于上面的df,您可以这样做:

df.index // 5
# Int64Index([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3], dtype='int64')

使用df.groupbydfGroupBy.sum获取最终答案只需一步:

df.groupby(df.index // 5).sum()

     A
0  250
1  347
2  266
3  328

如果您没有RangeIndex,请先使用df.reset_index,然后再进行分组。

答案 2 :(得分:2)

如果你可以管理一个带有和而不是系列的ndarray(无论如何你总是可以再次构建一个系列),你可以使用np.add.reduceat

np.add.reduceat(df.A.values, np.arange(0, df.A.size, 5))

在这种情况下返回

array([250, 347, 266, 328])