Расчет времени и группировка действий в DataFrame - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть датафрейм, в котором есть пользователи, действия и время, когда пользователи выполняли действия. Я хочу сгруппировать действия в список, если они удовлетворяют ОБА из двух условий: 1. действия были предприняты одним и тем же пользователем 2. действия были предприняты в течение 20 минут.

В данный момент я пытаюсь использовать timedelta для вычисления разницы во времени с итерацией и читаю этот пост, но это не то, что я ищу. Я изо всех сил пытаюсь найти подобные примеры.

датафрейм имеет тысячи строк, это его часть

user    action      time
A       browse      2018-07-01 06:00:00
A       edit        2018-07-01 06:10:00
B       signin      2018-07-01 06:00:00
B       browse      2018-07-01 06:11:00
B       edit        2018-07-01 07:00:00

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

output
[[browse, edit], [signin, browse]]

Последнее «редактирование», выполненное пользователем B, отсутствует в нем, потому что (07:00:00) - (06:11:00)> 20 минут

Любые предложения о том, как я могу это сделать? Большое спасибо в продвинутом!

1 Ответ

0 голосов
/ 02 ноября 2018

IIUC вы можете использовать,

df['time'] = pd.to_datetime(df.time) 

cond = df.groupby('user')['time'].diff().bfill().lt(pd.Timedelta('20m'))

df1 = df[cond].groupby('user')['action'].apply(list).tolist()

print (df1)

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