У меня есть pandas dataframe результатов NBA, где каждая строка представляет игру и статистику конкретного игрока в течение этой игры. Вот небольшая выборка строк:
League Offensive Rebound % Player_Name ... Blocks Outcome Age
0 NBA 1.0 Alaa Abdelnaby ... 0.0 W (+8) 25-211
1 NBA 2.0 Alaa Abdelnaby ... 2.0 W (+8) 25-214
2 NBA 5.0 Alaa Abdelnaby ... 1.0 W (+5) 25-216
3 NBA 0.0 Alaa Abdelnaby ... 0.0 W (+12) 25-220
4 NBA 2.0 Alaa Abdelnaby ... 0.0 L (-35) 25-222
5 NBA 0.0 Alaa Abdelnaby ... 0.0 L (-13) 25-223
6 NBA 0.0 Alaa Abdelnaby ... 0.0 L (-19) 25-238
7 NBA 0.0 Alaa Abdelnaby ... 0.0 L (-11) 25-240
8 NBA 0.0 Alaa Abdelnaby ... 0.0 L (-9) 25-241
9 NBA 0.0 Alaa Abdelnaby ... 0.0 L (-2) 25-243
[10 rows x 31 columns]
Я хотел добавить столбец, который отслеживает записи команды на тот момент сезона. Метод, который я придумал, состоял в том, чтобы сгруппировать фрейм данных по сезону, команде и игроку, затем отсортировать по дате и выполнить итерацию, добавляя к общему выигрышу, когда команда выиграла. Вот код:
# Get a group for each player each season
grouped_game_data = game_data.groupby(['Season', 'Team', 'Player_Name'])
game_data['Team Wins'] = np.nan
game_data['Team Losses'] = np.nan
# Iterate through players per season
for name, group in grouped_game_data:
# Keep track of current wins
curr_wins = 0
curr_losses = 0
# Iterate through games in a season by player
for idx, game in group.sort_values(by='Date').iterrows():
game_data.loc[idx, 'Team Wins'] = curr_wins
game_data.loc[idx, 'Team Losses'] = curr_losses
if game['Outcome'][0] == 'W':
curr_wins += 1
elif game['Outcome'][0] == 'L':
curr_losses += 1
Казалось, это работало нормально, но для запуска потребовалось некоторое время. Есть ли какой-либо способ векторизации этого кода или написание какого-то другого более эффективного метода, который достигает тех же результатов? Возможно, мне придется делать подобные операции позже, и я хотел бы, чтобы они занимали меньше времени. Заранее спасибо!