Pandas 从日志数据创建会话号

Pandas create session number from log data

我有一个带有时间戳、用户 ID、操作的日志数据。

我想根据以下规则创建会话 ID:

如果用户在 30 分钟内没有执行任何操作,它应该为下一个操作启动一个新的会话 ID。

因此对于以下数据框:

ts userID action
2020-05-23 00:01:19 user1 action1
2020-05-23 00:05:19 user1 action2
2020-05-23 00:35:19 user1 action3
2020-05-23 01:51:19 user1 action4
2020-05-23 00:01:19 user2 action1
2020-05-23 00:05:19 user2 action2
2020-05-23 00:35:19 user2 action3
2020-05-23 00:51:19 user2 action4

以下

ts userID action SessionID
2020-05-23 00:01:19 user1 action1 1
2020-05-23 00:05:19 user1 action2 1
2020-05-23 00:15:19 user1 action3 1
2020-05-23 00:51:19 user1 action4 2
2020-05-23 00:01:19 user2 action1 1
2020-05-23 00:05:19 user2 action2 1
2020-05-23 00:35:19 user2 action3 1
2020-05-23 00:51:19 user2 action4 1

为用户 1 创建一个新的 sessionID,因为在执行操作时距离上次记录已经超过 30 分钟。但是对于用户 2 没有这样的差距

提前致谢

userID 对数据帧进行分组,并针对每组 userID 计算时间戳列上的 diff,然后将差异与 30 分钟的时间增量进行比较,以创建一个布尔掩码最终使用 cumsum 为每个组创建会话 ID

f = lambda t: t.diff().gt(pd.Timedelta('30T')).cumsum()
df['SessionID'] = df.groupby('userID')['ts'].apply(f) + 1

                   ts userID   action  SessionID
0 2020-05-23 00:01:19  user1  action1          1
1 2020-05-23 00:05:19  user1  action2          1
2 2020-05-23 00:35:19  user1  action3          1
3 2020-05-23 01:51:19  user1  action4          2
4 2020-05-23 00:01:19  user2  action1          1
5 2020-05-23 00:05:19  user2  action2          1
6 2020-05-23 00:35:19  user2  action3          1
7 2020-05-23 00:51:19  user2  action4          1