Pandas Group By + Cumsum для категориальной переменной - PullRequest
0 голосов
/ 10 июня 2018

Я делаю ставки на футбольные матчи, которые сделали пользователи.Их статус правильный или неправильный.Каждую неделю (в таблице jornada) на каждого пользователя приходится 10 матчей.Кроме того, пользователи группируются в сообщества.

Я хочу вычислить совокупное соотношение #Corrects / (#Corrects + #Incorrects) в неделю ('jornada') foreach user.

Вот так будет выглядеть набор данных:enter image description here

Каждую неделю у каждого пользователя будет 10 новых догадок («число»), которые должны быть накоплены для его предыдущих догадок за тот же сезон («темпорада»)).

Вот что я пробовал:

bets.groupby(['temporada', 'username', 'comunidad', 'jornada'])['status'].cumsum()

Но возникает ошибка: DataError: No numeric types to aggregate

Я также пытаюсь скрыть статус с помощью get_dummies изатем примените cum_sum к группе, но я должен получить такое же соотношение для 10 раз, когда один и тот же пользователь появляется на той же неделе, и этого не происходит:

dum = pd.get_dummies(bets['status'])
bets2 = pd.concat([bets, dum], axis=1) 

corrects = bets2.groupby(['temporada', 'username', 'comunidad', 'jornada'])['Correct'].cumsum()
incorrects = bets2.groupby(['temporada', 'username', 'comunidad', 'jornada'])['Incorrect'].cumsum()
ratio = corrects / (corrects + incorrects)
bets3 = pd.concat([bets2, ratio], axis=1)

1 Ответ

0 голосов
/ 10 июня 2018

Вы можете создать новый пункт справки для расчета

s1=bets.assign(correct=bets['status']=='Corrects').groupby(['temporada', 'username', 'comunidad', 'jornada']).correct.cumsum()
s2=bets.assign(correct=bets['status']=='Incorrects').groupby(['temporada', 'username', 'comunidad', 'jornada']).correct.cumsum()
bets['New']=(s1/(s1+s2)).values
...