Использование groupby и loc для установки нового фрейма данных - PullRequest
0 голосов
/ 29 июня 2018

Привет! У меня есть фрейм данных:

df = pd.DataFrame()
df['Team1']   = ['A','B','C','D','E','F','A','B','C','D','E','F']
df['Score1']  = [1,2,3,1,2,4,1,2,3,1,2,4]
df['Team2']   = ['U','V','W','X','Y','Z','U','V','W','X','Y','Z']
df['Score2']  = [2,1,2,2,3,3,2,1,2,2,3,3]
df['Match']   = df['Team1']  + ' Vs '+ df['Team2']
df['Match_no']= [1,2,3,4,5,6,1,2,3,4,5,6]
df['model']  = ['ELO','ELO','ELO','ELO','ELO','ELO','xG','xG','xG','xG','xG','xG']
winner = df.Score1>df.Score2
df['winner']  = np.where(winner,df['Team1'],df['Team2'])

Что я хочу сделать, так это создать еще одну рамку даты для следующего этапа турнира. На следующем этапе у нас будет 3 совпадения для каждой модели (ELO и xG). Я бы хотел сгруппировать Модель . Эти матчи подразделяются на Модель , играют победитель из матча № 1 и матча № 1, победитель из матча № 3 против матча № 4 и т. Д. (Т. Е. U против B, C против X, Y против F) , Тогда может кто-нибудь посоветовать мне, как извлечь эти команды?

мой ожидаемый новый фрейм данных будет следующим:

df1 =pd.DataFrame()
df1['Team1']   = ['U','C','Y','U','C','Y']
df1['Team2']   = ['B','X','F','B','X','F']

df1['Match']   = df1['Team1']  + ' Vs '+ df1['Team2']
df1['Match_no']= [1,2,3,1,2,3]
df1['model']  = ['ELO','ELO','ELO','xG','xG','xG']

Как мне это настроить? Спасибо,

Zep

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы можете использовать GroupBy.cumcount для подсчета по группам:

df1 = pd.DataFrame()
df1['Team1'] = df.loc[::2, 'winner'].values
df1['Team2'] = df.loc[1::2, 'winner'].values
df1['Match'] = df1['Team1']  + ' Vs '+ df1['Team2']
model = df.loc[::2, 'model'].values
df1['Match_no'] = df1.groupby(model).cumcount() + 1
df1['model'] = model
print (df1)
  Team1 Team2   Match  Match_no model
0     U     B  U Vs B         1   ELO
1     C     X  C Vs X         2   ELO
2     Y     F  Y Vs F         3   ELO
3     U     B  U Vs B         1    xG
4     C     X  C Vs X         2    xG
5     Y     F  Y Vs F         3    xG
0 голосов
/ 29 июня 2018

Я постараюсь дать вам ответ, хотя мне трудно понять, что вы подразумеваете под "победителем с нечетным номером матча и четным номером матча".

Если это означает, что победители из матчей 1 и 2 пары, затем 3 и 4 и т. Д. Вы можете сделать что-то простое, например

df1['Team1'] = df.loc[::2, 'winner']
df1['Team2'] = df.loc[1::2, 'winner']

с учетом того, что ваши данные отсортированы в представленном виде. Вы можете достичь этого с помощью

df[df['model'] == 'ELO'].sort_values('Match_no')

и т.д.. Панды-группи, кажется, не нужны, если я правильно понял.

...