#python #pandas
#python #pandas
Вопрос:
Я очень новичок в pandas и фреймах данных. Я играю с данными и пытаюсь найти способ рассчитать рекорд команды на основе результатов их расписания. Я перепробовал довольно много вещей и просматривал iterrows, но в сообщении было сказано держаться от этого подальше. Итак, как бы вы рассчитали запись, не используя itterrows?
def get_team_record(team, last = 0):
team_df = get_team_schedule(team, last)
record = {'wins': 0, 'losses': 0}
return record
Функция get_team_schedule извлекает расписание конкретной команды из набора игр. Он возвращает что-то вроде этого:
Дата | Время | Посетитель | V_PTS | Главная | H_PTS | |
---|---|---|---|---|---|---|
9 | Ср., 23 декабря 2020 г. | 8:00p | Сан-Антонио Сперс | 131.0 | Мемфис Гриззлиз | 119.0 |
19 | Сб, 26 декабря 2020 г. | 5:00p | Атланта Хокс | 122.0 | Мемфис Гриззлиз | 112.0 |
39 | Пн, 28 декабря 2020 г. | 7:30p | Мемфис Гриззлиз | 116.0 | Бруклин Нетс | 111.0 |
56 | Ср., 30 декабря 2020 г. | 7:30p | Мемфис Гриззлиз | 107.0 | Бостон Селтикс | 126.0 |
Каков наилучший способ подсчета выигрышей и проигрышей каждой команды?
Ответ №1:
Вы можете получить результаты idxmax()
каждой игры, чтобы выяснить, выиграли дома или в гостях. Оттуда определите победителя и проигравшего с np.where
помощью, затем concat
value_counts()
каждого из этих столбцов, которые мы создали, и верните сумму каждой группы. Использование .sum(level=0)
— это простой способ сделать .groupby
и sum
использовать индекс как группу. Индекс — это команды после выполнения value_counts().to_frame()
и concat
:
s = df[['V_PTS', 'H_PTS']].idxmax(axis=1)
df['Wins'] = np.where(s.eq('V_PTS'), df['Visitor'], df['Home'])
df['Losses'] = np.where(s.eq('V_PTS'), df['Home'], df['Visitor'])
df = (pd.concat([df['Wins'].value_counts().to_frame(),
df['Losses'].value_counts().to_frame()])
.sum(level=0))
df
Out[1]:
Wins Losses
Atlanta Hawks 1.0 0.0
Boston Celtics 1.0 0.0
San Antonio Spurs 1.0 0.0
Memphis Grizzlies 1.0 3.0
Brooklyn Nets 0.0 1.0
Ответ №2:
import pandas as pd
import numpy as np
def get_team_record(team, last = 0):
team_df = get_team_schedule(team, last)
results = np.where(
# define these two conditions as a win, otherwise a loss
((team_df['Visitor'] == team) amp; (team_df['V_PTS'] > team_df['H_PTS'])) |
((team_df['Home'] == team) amp; (team_df['H_PTS'] > team_df['V_PTS'])),
'win', 'loss')
# sum each outcome and add to dict
record = {'wins': np.sum(results == 'win'),
'losses': np.sum(results == 'loss')}
return(record)