Вы можете сделать что-то вроде этого:
flatten = [e for p in zip(df.home_team, df.away_team) for e in p]
counts = pd.DataFrame((pd.Series(flatten).groupby(flatten).cumcount() + 1).values.reshape(-1, 2),
columns=['games_HomeTeam', 'games_AwayTeam'])
print(pd.concat([df, counts], axis=1))
выход
home_team away_team games_HomeTeam games_AwayTeam
0 1 2 1 1
1 3 4 1 1
2 1 3 2 2
3 2 4 2 2
4 1 5 3 1
Сначала сгладьте две колонки, затем группу и cumcount, а затем измените форму. Окончательно согласен с df
.