Как мне выполнить суммирование `n` строк за раз в пандах?
Учитывая фрейм данных
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 ответа
Предполагая, что ваши индексы смежны, вы можете выполнить целочисленное деление на df.index
, а затем сгруппировать по индексу.
Для df
выше, вы можете сделать это:
In [447]: df.index // 5
Out[447]: Int64Index([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3], dtype='int64')
Получить окончательный ответ - еще один шаг, используя df.groupby
а также dfGroupBy.sum
:
In [448]: df.groupby(df.index // 5).sum()
Out[448]:
A
0 250
1 347
2 266
3 328
Если у вас нет RangeIndex
использовать df.reset_index
сначала и потом группа.
Если вы можете управлять ndarray суммами, а не сериями (вы всегда можете построить серию заново), вы можете использовать np.add.reduceat
,
np.add.reduceat(df.A.values, np.arange(0, df.A.size, 5))
Который в этом случае возвращает
array([250, 347, 266, 328])