У меня есть набор данных World Cup 2018 от kaggle. Чемпионат мира ФИФА статистика
В этом наборе данных каждая строка представляет собой не совпадение, а команду и ее результаты в игре.
Например:
Как я могу рассчитать разницу в цели каждой команды из этого набора данных. Я имею в виду, есть ли более простой способ или панда.
Мой расчет таков:
goal_diff = {}
teams = df["Team"].unique()
for t in teams:
goal_diff[t] = df[df["Team"] == t]["Goal Scored"].sum() \
- df[df["Opponent"] == t]["Goal Scored"].sum()
Спасибо за ваши ответы.
Вы можете агрегировать по GroupBy.sum
, вычесть и последний конвертировать в dict
:
goal_diff = ((df.groupby('Team')["Goal Scored"].sum() -
df.groupby('Opponent')["Goal Scored"].sum()).to_dict())
print (goal_diff)
{'Argentina': -3, 'Australia': -3, 'Belgium': 10,
'Brazil': 5, 'Colombia': 3, 'Costa Rica': -3,
'Croatia': 5, 'Denmark': 1, 'Egypt': -4,
'England': 4, 'France': 8, 'Germany': -2,
'Iceland': -3, 'Iran': 0, 'Japan': -1,
'Korea Republic': 0, 'Mexico': -3, 'Morocco': -2,
'Nigeria': -1, 'Panama': -9, 'Peru': 0,
'Poland': -3, 'Portugal': 0, 'Russia': 4,
'Saudi Arabia': -5, 'Senegal': 0, 'Serbia': -2,
'Spain': 1, 'Sweden': 2, 'Switzerland': 0,
'Tunisia': -3, 'Uruguay': 4}
если вы суммируете забитую команду командой Team, вы получаете количество забитых этой командой очков. если вы суммируете забитую комбинацию очков противником, вы получаете количество очков, полученных этой командой. общая разница целей - разница между ними.
df.groupby("Team").sum()["Goal Scored"] - df.groupby("Opponent").sum()["Goal Scored"]