У меня есть фрейм данных с 4 столбцами. Столбцы: Домашняя_команда Команда_гости Домашняя_команда_гол Away_team_goal
Я хочу создать столбец победителей, используя цели. Я пишу код ниже, но когда я его запускаю, в столбце победителей появляются только домашние команды.
A = ['A', '1', 'D', '2']
B = ['B', '2', 'E', '2']
C = ['C', '3', 'F', '2']
df = pd.DataFrame(np.array([A,B,C]), columns = ['Home_team', 'Home_team_goal', 'Away_team', 'Away_team_goal'])
df['Home_team_goal'] = pd.to_numeric(df['Home_team_goal'])
df['Away_team_goal'] = pd.to_numeric(df['Away_team_goal'])
df['Average'] = df['Home_team_goal'] - df['Away_team_goal']
df['Winner'] = ''
for i, e in enumerate(df['Average']):
if e > 0:
df['Winner'] = df['Home_team']
elif e < 0:
df['Winner'] = df['Away_team']
else:
df['Winner'] = 'Tie'
Используйте np.where()
.
Это можно сделать с помощью Numpy.select:
import numpy as np
cond1 = df['Home_team_goal'] > df['Away_team_goal']
cond2 = df['Home_team_goal'] < df['Away_team_goal']
df['Winner'] = np.select([cond1, cond2], ['Home_team', 'Away_team'], default = 'Tie')
дополнительно (напечатал здесь как слишком неудобно для комментария....
df['Average'] = df['Home_team_goal'] - df['Away_team_goal']
бросит
TypeError: unsupported operand type(s) for -: 'str' and 'str'
вам нужно преобразовать их в целые числа
df['Home_team_goal'] = df['Home_team_goal'].astype(int)
df['Away_team_goal'] = df['Away_team_goal'].astype(int)
Здесь другой подход:
def Winner(x):
if x > 0:
return 1
elif x < 0:
return 2
else:
return 0
df['Winner'] = df['Average'].apply(Winner)
Пожалуйста, прочитайте минимальный воспроизводимый пример