Как создать порядок в группах панелей данных? - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть dataframe, в котором я хочу добавить столбец, который будет указывать порядок даты для каждого user_id отдельно, так что это будет как в TABLE2.

TABLE1:

user_id         received_at          action    
0043e1a6-52e4   2018-01-05 12:32:10  A                 
                2018-01-05 12:33:13  A                 
                2018-01-05 12:42:12  B                 
0070f782-29f4   2018-01-06 01:41:18  A                 
                2018-01-06 01:42:12  A                 
                2018-01-06 01:43:11  B                 
                2018-01-06 01:44:18  C                               
008aa58a-84a5   2018-01-06 14:22:13  A                 
                2018-01-06 14:23:18  A                 
                2018-01-06 14:24:13  A                 
                2018-01-06 14:25:18  C 

примерно так

TABLE2:

user_id         received_at          action  order_n 
0043e1a6-52e4   2018-01-05 12:32:10  A       1               
                2018-01-05 12:33:13  A       2               
                2018-01-05 12:42:12  B       3               
0070f782-29f4   2018-01-06 01:41:18  A       1               
                2018-01-06 01:42:12  A       2               
                2018-01-06 01:43:11  B       3               
                2018-01-06 01:44:18  C       4                             
008aa58a-84a5   2018-01-06 14:22:13  A       1               
                2018-01-06 14:23:18  A       2               
                2018-01-06 14:24:13  A       3               
                2018-01-06 14:25:18  C       4  

Есть ли более эффективное и, возможно, более простое решение, чем выполнение итерации для каждого user_id отдельно?

1 Ответ

0 голосов
/ 05 сентября 2018

groupby user_id и получите rank, используя received_at

df['count_n'] = df.groupby('user_id').received_at.apply(pd.Series.rank)

Это не требует шага сортировки и назначит правильный ранг, даже если кадр данных не отсортирован по received_at в каждой группе

если столбец user_id установлен в качестве индекса (как показывает пример ваших данных ), вы можете вместо этого использовать следующее. Хотя в последних версиях панд также работает группировка по именованным индексам (т. Е. Вышеописанное может работать)

df.groupby(level=0).received_at.apply(pd.Series.rank)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...