对于用户分析,我有一个包含事件和每个事件时间戳的数据库。
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
数据框有可能吗?
答案 0 :(得分:3)
#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