Если у меня есть фрейм данных, как это.

df = [3, 2, 4, 1, 0, 3]

Я хочу нарезать на сумму 3 значение, как это.

3+2+4 = 9
2+4+1 = 7
4+1+0 = 5
1+0+3 = 4

Итак, результат будет.

9, 7, 5, 4

Как суммировать данные с помощью python?

0
user58519 10 Ноя 2019 в 21:20
Методами pandas - df.rolling(3).sum().dropna().iloc[:,0].tolist()
 – 
splash58
10 Ноя 2019 в 21:34
Не совсем ... df здесь, похоже, список (немного сбивающее с толку название) - он должен быть как минимум Series, так что, вероятно: pd.Series(df).rolling(3).dropna().astype(int).tolist(), вероятно, ближе (в зависимости от действительно ли полный результат скользящего окна помещается как int с отброшенными NaN)
 – 
Jon Clements
10 Ноя 2019 в 21:50
1
В последнем предложении написано «фрейм данных». Итак, я думаю, мы можем предположить, что это фрейм данных / серия. Возможно OP не знал, как правильно его отформатировать в вопросе
 – 
Erfan
10 Ноя 2019 в 22:05
Если один из ответов помог вам решить вашу проблему, это хорошая практика принять ответ, который вы собираетесь использовать, особенно когда несколько человек нашли время, чтобы предложить решения вашей проблемы. Если нет, не могли бы вы уточнить свои требования.
 – 
David Buck
12 Ноя 2019 в 16:43

3 ответа

Вы можете сделать это с помощью скользящего среза в понимании списка

df = [3, 2, 4, 1, 0, 3]
print([sum(df[i:i+3]) for i in range(len(df)-2)])
[9, 7, 5, 4]
2
David Buck 10 Ноя 2019 в 21:26

Вы можете использовать что-то вроде этого.

a = map(lambda x: sum(df[x:x+3]),range(len(df)-2))
print(list(a))
0
sleeping_coder 10 Ноя 2019 в 21:46

Ваш df не является фреймом данных. Это список. Вы можете использовать выражение генератора с np.roll

n = 3
a = np.array(df)
sum(np.roll(a, -x) for x in range(n))[:len(a)-n+1]

Out[29]: array([9, 7, 5, 4])
0
Andy L. 10 Ноя 2019 в 22:04