Есть ли способ вычислить запись проигрыша в расписании с pandas?

#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)