Чтобы быть более поучительным, я расширил ваши исходные данные до 10 игр
и «сокращенные» имена столбцов, чтобы сделать распечатку не такой широкой.
Итак, первая часть скрипта, генерирующая источник DataFrame, выглядит следующим образом:
import pandas as pd
# Source data
df = pd.DataFrame(data=[
[ 1, 'TB', 'CLB', 1], [ 2, 'NY', 'ARZ', 0],
[ 3, 'EDM', 'CAN', 1], [ 4, 'NY', 'TB', 0],
[ 5, 'NY', 'CLB', 1], [ 6, 'TB', 'NY', 1],
[ 7, 'ARZ', 'CAN', 1], [ 8, 'ARZ', 'TB', 0],
[ 9, 'NY', 'EDM', 1], [10, 'TB', 'CAN', 1]],
columns=['gameID', 'HomeTeam', 'AwayTeam', 'HomeWin']).set_index('gameID')
df['AwayWin'] = 1 - df['HomeWin']
Поскольку команда-победитель может быть как в HomeTeam
, так и в AwayTeam
, нет
Простой способ использования одного groupby
.
Вы должны использовать его дважды, генерируя каждый столбец результатов.
Чтобы сгенерировать HTWins
(Общее количество побед домашних команд), используйте:
hWin = df.HomeTeam.where(df.HomeWin == 1, df.AwayTeam)
hCnt = hWin.groupby(hWin).cumcount()
df['HTWins'] = hCnt.where(df.HomeWin == 1, 0)
И для генерации ATWins
(Общее количество побед в гостях) используйте:
aWin = df.AwayTeam.where(df.AwayWin == 1, df.HomeTeam)
aCnt = aWin.groupby(aWin).cumcount()
df['ATWins'] = aCnt.where(df.AwayWin == 1, 0)
Когда вы print(df)
, вы получите:
HomeTeam AwayTeam HomeWin AwayWin HTWins ATWins
gameID
1 TB CLB 1 0 0 0
2 NY ARZ 0 1 0 0
3 EDM CAN 1 0 0 0
4 NY TB 0 1 0 1
5 NY CLB 1 0 0 0
6 TB NY 1 0 2 0
7 ARZ CAN 1 0 1 0
8 ARZ TB 0 1 0 3
9 NY EDM 1 0 1 0
10 TB CAN 1 0 4 0
Чтобы помочь понять, как работает этот скрипт, запустите каждую инструкцию
отдельно и распечатайте результат.