使用数据帧标识会话



对于用户分析,我有一个包含事件和每个事件的时间戳的数据库。

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

现在,我想通过使用会话 ID 注释事件来识别每个用户的"会话"。

每个会话都应由用户的一组事件标识,这些事件之间没有 X 秒(或分钟)的间隔。这意味着事件关闭会话后的 X 秒间隔。会话 ID 不必以每个用户的 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

数据帧可以做到这一点吗?

使用 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

最新更新