Панды - cumsum () в groupby () по нескольким осям - PullRequest
0 голосов
/ 25 сентября 2019

Я новичок в Пандах.У меня есть набор данных, который является результатами скачек.Пример здесь:

RaceID  RaceDate    RaceMeet   Position Horse       Jockey          Trainer        RaceLength race win  HorseWinPercentage 
446252  01/01/2008  Southwell (AW)  1   clear reef  tom mclaughlin  jane chapple-hyam   3101    1   1   0
447019  14/01/2008  Southwell (AW)  5   clear reef  tom mclaughlin  jane chapple-hyam   2654    1   0   100
449057  21/02/2008  Southwell (AW)  2   clear reef  tom mclaughlin  jane chapple-hyam   3101    1   0   50
463805  26/08/2008  Chelmsford (AW) 6   clear reef  tom mclaughlin  jane chapple-hyam   3080    1   0   33.33333333
469220  27/11/2008  Chelmsford (AW) 3   clear reef  tom mclaughlin  jane chapple-hyam   3080    1   0   25
470195  11/12/2008  Chelmsford (AW) 5   clear reef  tom mclaughlin  jane chapple-hyam   3080    1   0   20
471052  26/12/2008  Wolhampton (AW) 1   clear reef  andrea atzeni   jane chapple-hyam   2690    1   1   16.66666667
471769  07/01/2009  Wolhampton (AW) 6   clear reef  ian mongan      jane chapple-hyam   2690    1   0   28.57142857
472137  13/01/2009  Chelmsford (AW) 2   clear reef  jamie spencer   jane chapple-hyam   3080    1   0   25
472213  20/01/2009  Southwell (AW)  5   clear reef  jamie spencer   jane chapple-hyam   2654    1   0   22.22222222
476595  25/03/2009  Kempton (AW)    4   clear reef  pat cosgrave    jane chapple-hyam   2639    1   0   20
477674  08/04/2009  Kempton (AW)    5   clear reef  pat cosgrave    jane chapple-hyam   2639    1   0   18.18181818
479098  21/04/2009  Kempton (AW)    3   clear reef  andrea atzeni   jane chapple-hyam   2639    1   0   16.66666667
492913  14/11/2009  Wolhampton (AW) 1   clear reef  andrea atzeni   jane chapple-hyam   3639    1   1   15.38461538
493720  25/11/2009  Kempton (AW)    3   clear reef  andrea atzeni   jane chapple-hyam   3518    1   0   21.42857143
495863  29/12/2009  Southwell (AW)  1   clear reef  shane kelly     jane chapple-hyam   3101    1   1   20

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

Когда мне просто нужногруппировать по одной оси - это прекрасно работает:

df['horse_win_count'] = df.groupby(['Horse'])['win'].cumsum()
df['horse_race_count'] = df.groupby(['Horse'])['race'].cumsum()
df['HorseWinPercentage2'] = df['horse_win_count'] / df['horse_race_count'] * 100
df['HorseWinPercentage'] = df.groupby('Horse')['HorseWinPercentage2'].shift(+1)

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

Например, я должен был выигратьпроцентное соотношение, когда конкретный жокей едет на лошади по группам (например, «жокей», «тренер»).Тогда мне нужно знать процент, как он меняется для каждой отдельной строки (расы).

df['jt_win_count'] = df.groupby(['Jockey','Trainer'])['win'].cumsum()
df['jt_race_count'] = df.groupby(['Jockey','Trainer'])['race'].cumsum()
df['JTWinPercentage2'] = df['jt_win_count'] / df['jt_race_count'] * 100
df['JTWinPercentage'] = df.groupby(['Jockey','Trainer'])['JTWinPercentage2'].shift(+1)
df['JTWinPercentage'].fillna(0, inplace=True)

Или я хочу подсчитать, сколько раз лошадь выиграла за этот ход и эту дистанцию.Поэтому мне нужно сгруппировать (['Horse', 'RaceMeet', 'RaceLength']):

df['CD'] = df.groupby([‘RaceMeet’,’RaceLength’,’Horse’])[‘win’].cumsum()
df['CD'] = df.groupby(["RaceMeet","RaceLength","Horse"]).shift(+1)

Я получаю результаты за 10 с 1000 с.

Как сгруппировать несколькоось, сделать вычисление и сдвинуть результаты обратно на одну запись, в то время как сгруппированы по нескольким записям?

И еще лучше вы можете объяснить, почему мой код выше не работает?Как я уже сказал, я новичок в Пандах и хочу учиться.

Приветствия.

1 Ответ

0 голосов
/ 25 сентября 2019

Вопрос уже был задан: Pandas DataFrame Group разбить на два столбца и получить число и вот здесь python pandas groupby () результат

Я действительно не знаю, какова ваша цельэто хотя.Я думаю, что вы должны сначала добавить еще один столбец с новым параметром, по которому вы хотите группировать.например: df['jockeyTrainer']=df.loc['Jockey']+df.loc['Trainer'] Тогда вы можете использовать это для группового.Или вы переходите по информации в ссылках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...