Проблема, которую я имею, это то, что я хочу предсказать победу команды над другой, сделать то, что я хочу иметь для каждого матча winrate каждой команды до даты матча.
Однако использование df.groupBy("teamName").agg({"isVictory":"mean"})
предоставляет мне глобальный wirate команды, который не используется, потому что вы не должны знать winrate всех матчей на этом мгновенный.
Поэтому я хотел бы получить winrate совпадений до этого, зная, что у меня есть index
столбца в моем DataFrame, который поддерживает порядок совпадения (т.е. Если индекс совпадения меньше, чем индекс текущее совпадение означает, что матч был сделан ранее, поэтому этот матч следует рассматривать в среднем)
Обратите внимание, что мои столбцы:
indexMatch, nameTeam, isVictoryTeam
(isVictoryTeam = если Team1 выиграл и 0, если команда проиграла)
пример набора данных:
IndexMatch isVictoryTeam team winrate
0 1 1 a NaN
1 2 0 a 1
2 3 1 a 0.5
3 4 1 a 0.6667
Ожидается результат winrate.
Спасибо заранее за вашу помощь.
Должен быть лучший способ, но это работает:
df = pd.DataFrame({'team': [' a', ' a', ' a', ' a', 'b', 'b', 'c'],
'IndexMatch': [1, 2, 3, 4, 5, 6, 7],
'isVictoryTeam': [1, 0, 1, 1, 0, 1, 1]})
df['winrate'] = df.groupby('team')['isVictoryTeam'].expanding().mean().reset_index().groupby('team')['isVictoryTeam'].shift().reset_index(drop=True)
df
# IndexMatch isVictoryTeam team winrate
#0 1 1 a NaN
#1 2 0 a 1.000000
#2 3 1 a 0.500000
#3 4 1 a 0.666667
#4 5 0 b NaN
#5 6 1 b 0.000000
#6 7 1 c NaN