Я работаю над разработкой модели машинного обучения для прогнозирования счета определенной команды. Я хочу создать столбец, отслеживающий совокупный счет каждой команды в их домашних играх, вплоть до текущей игры (строки), но не включая ее. Я могу легко вычислить совокупную сумму, но я хочу компенсировать совокупную сумму, чтобы отобразить совокупную сумму до текущей игры, но не включая ее. Ниже приведен пример набора данных. В идеале я хотел бы создать накопительный столбец
Код ниже — это то, что я сделал до сих пор для создания совокупного итога.
import pandas as pd
data = pd.read_csv('game_data.csv')
data['home_cumulative'] = data.groupby('home_id')['home_score'].cumsum()
Я попытался сделать следующее, но результаты не соответствуют моим ожиданиям.
data['home_offset'] = data.groupby('home_id')['home_score'].shift(periods = 1).cumsum().fillna(0)
В принципе, у вас была правильная идея, только немного не так с кодом:
data['home_offset'] = data.groupby('home_id')['home_cumulative'].shift(1).fillna(0)
Вы можете использовать:
data['cumulative'] = (data.groupby('home_id')['home_score']
.transform(lambda x: x.cumsum().shift(1))
.fillna(0)
.astype(int))
давать:
game_id game_date home_id home_score cumulative
0 718730 2023-04-03 145 3 0
1 718695 2023-04-05 145 7 3
2 718687 2023-04-06 145 6 10
3 718683 2023-04-06 109 2 0
4 718671 2023-04-07 109 6 2
5 718656 2023-04-08 109 12 8
Я бы разбил его на два этапа:
Для расчета накопительной суммы
data['cumulative'] = data.groupby(['home_id'])['home_score'].cumsum()
Для компенсации суммы,
data['offset_cumulative'] = data.groupby(['home_id']['cumulative'].shift(1,fill_value=0)