Причина, по которой ваша функция не сработала, заключается в том, что matches
в вашей функции - это фрейм данных.Когда вы сделаете:
for i in matches:
print(i)
Вы увидите, что имена столбцов возвращаются из вашего текущего df.Вот как цикл for работает на df.Так что в вашей функции, когда вы используете i в вызове вычитания:
i['home_team_goal'] -i['away_team_goal']
это похоже на выполнение
['country_id']['home_team_goal'] - ['country_id']['away_team_goal']
['league_id']['home_team_goal'] - ['league_id']['away_team_goal']
...
Эта операция в пандах не имеет никакого смысла.То, что вы на самом деле хотите делать, когда вызываете определенные столбцы данных, это имя df со столбцом:
matches['home_team_goal'] - matches['away_team_goal']
Помните, совпадения - это ввод df вашей функции.Наконец, в цикле for вы не возвращаете ни одно значение и не сохраняете никакого значения, вы просто вызываете метод вычитания в 2 столбцах.В вашем текстовом редакторе или IDE вы можете увидеть что-то, выводимое на экран, но в будущем вы, вероятно, захотите использовать эти значения для следующего шага в вашем коде.Поэтому в функции мы используем вызов return
, чтобы функция фактически давала нам значения, когда мы вызываем ее для чего-то.
В вашем случае, если я напишу свою функцию ниже без вызова return
,и затем вызовите функцию на моем фрейме данных, операция завершится, и мне не будет «возвращено» никакое значение, оно просто будет создано и исчезнет.
Предварительно отредактированный ответ.
Вам не нужно создавать цикл для этого, pandas сделает это за вас:
def goal_dff(matches):
return matches['home_team_goal'] - matches['away_team_goal']
match_all['home_away_goal_diff'] = goal_diff(match_all)
Эта функция принимает входной df и использует столбцы home_team_goal и away_team_goal для вычисления разницы.Вам также не нужна функция для этого.Если вы хотите создать новый столбец в существующем match_all
df, вы можете сделать это:
match_all['home_away_goal_diff'] = match_all['home_team_goal'] - match_all['away_team_goal']