使用数据框识别会话

时间:2019-01-07 13:20:45

标签: python pandas dataframe data-science

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

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

数据框有可能吗?

1 个答案:

答案 0 :(得分:3)

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