Pandas DataFrame: как получить среднее значение столбца, но с учетом только тех строк, индекс которых ниже, чем тот, который я хочу получить среднее - PullRequest
0 голосов
/ 27 августа 2018

Проблема, с которой я столкнулся, заключается в том, что я хочу предсказать победу команды над другой, для этого я хочу, чтобы в каждом матче был выигрыш каждой команды до даты матча.

Однакоиспользование df.groupBy("teamName").agg({"isVictory":"mean"}) дает мне глобальный член команды, который нельзя использовать, потому что вы не должны знать выигрыш всех матчей в данный момент.

Так что я хотел бы получить выигрышиз совпадений до этого, зная, что в моем DataFrame есть столбец index, в котором хранится порядок совпадения (т. е. если индекс совпадения меньше, чем индекс текущего совпадения, это означает, что совпадение выполненопрежде, таким образом, это совпадение следует рассматривать как среднее значение)

Обратите внимание, что мои столбцы:

indexMatch, nameTeam, isVictoryTeam

(isVictoryTeam =если команда 1 выиграла, и 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

Ожидаемая скорость передачи - это ожидаемый результат.
Заранее спасибо за вашу помощь.

1 Ответ

0 голосов
/ 27 августа 2018

Должен быть лучший способ, но этот работает:

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
...