Используйте Dataframes для идентификации сессий - PullRequest
0 голосов
/ 07 января 2019

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

Timestamp   |   user    |    event code
13:30:23    |   user1   |    event123
13:30:45    |   user1   |    event123
13:30:56    |   user3   |    event123
13:40:15    |   user2   |    event123
13:55:20    |   user1   |    event123

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

Каждый сеанс должен идентифицироваться группой событий для пользователя, между которыми нет промежутка в X секунд (или минут). Это означает, что X второй промежуток после события закрывает сессию. Идентификаторы сеанса не обязательно должны начинаться с 0 для каждого пользователя, но позже используются только для каждого пользователя. Здесь установлено X = 5 минут.

Timestamp   |   user    |    event code    | session_id
13:30:23    |   user1   |    event123      | 1
13:30:45    |   user1   |    event123      | 1
13:30:56    |   user3   |    event123      | 2
13:40:15    |   user2   |    event123      | 3
13:55:20    |   user1   |    event123      | 4

Возможно ли это с кадрами данных?

1 Ответ

0 голосов
/ 07 января 2019

Использование GroupBy.ngroup:

#convert to datetimes
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
#identify difference 5Min for each group with cumulative sum
g = (df.groupby('user')['Timestamp'].diff() > pd.Timedelta('5Min')).cumsum()
#create counter of groups
df['session_id'] = df.groupby(['user', g], sort=False).ngroup() + 1
print (df)
            Timestamp   user event code  session_id
0 2019-01-07 13:30:23  user1   event123           1
1 2019-01-07 13:30:45  user1   event123           1
2 2019-01-07 13:30:56  user3   event123           2
3 2019-01-07 13:40:15  user2   event123           3
4 2019-01-07 13:55:20  user1   event123           4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...