问题描述
我有下面的数据框,我希望在数据框中创建一个名为“会话”的新列。如果用户花费的时间超过 5 分钟(5*60 = 300 秒),将创建新会话。每个用户从屏幕移动到另一个屏幕所花费的时间(经过的时间)在数据帧的“增量”列中表示。
最长会话不超过 5 分钟(300 秒)。
这是输入:
df =
ip screen timestamp \
0 172.28.79.133 discoverStudents 2020-11-08 17:54:53
1 172.28.79.133 Messages 2020-11-08 17:54:56
2 172.28.79.133 Chat 2020-11-08 17:54:57
3 172.28.79.133 discoverStudents 2020-11-10 20:36:32
4 172.28.79.133 discoverStudents 2020-11-10 20:37:01
5 172.28.79.133 Messages 2020-11-10 20:37:04
6 172.28.79.133 Chat 2020-11-10 20:37:07
7 172.28.79.133 Messages 2020-11-10 20:37:09
8 172.28.79.133 discoverStudents 2020-11-10 20:37:16
userId delta
0 0xsupl8ge5SeLRvKHts8s7lEnlq2 NaT
1 0xsupl8ge5SeLRvKHts8s7lEnlq2 0 days 00:00:03
2 0xsupl8ge5SeLRvKHts8s7lEnlq2 0 days 00:00:01
3 0xsupl8ge5SeLRvKHts8s7lEnlq2 1 days 23:31:39
4 0xsupl8ge5SeLRvKHts8s7lEnlq2 0 days 00:00:29
5 0xsupl8ge5SeLRvKHts8s7lEnlq2 0 days 00:00:03
6 0xsupl8ge5SeLRvKHts8s7lEnlq2 0 days 11:00:03
7 0xsupl8ge5SeLRvKHts8s7lEnlq2 0 days 00:00:02
8 0xsupl8ge5SeLRvKHts8s7lEnlq2 0 days 00:00:07
我希望上面的数据框在添加会话列后是这样的: 这是预期的输出(我正在寻找的输出):
ip screen timestamp \
0 172.28.79.133 discoverStudents 2020-11-08 17:54:53
1 172.28.79.133 Messages 2020-11-08 17:54:56
2 172.28.79.133 Chat 2020-11-08 17:54:57
3 172.28.79.133 discoverStudents 2020-11-10 20:36:32
4 172.28.79.133 discoverStudents 2020-11-10 20:37:01
5 172.28.79.133 Messages 2020-11-10 20:37:04
6 172.28.79.133 Chat 2020-11-10 20:37:07
7 172.28.79.133 Messages 2020-11-10 20:37:09
8 172.28.79.133 discoverStudents 2020-11-10 20:37:16
userId delta session
0 0xsupl8ge5SeLRvKHts8s7lEnlq2 NaT NaT
1 0xsupl8ge5SeLRvKHts8s7lEnlq2 0 days 00:00:03 1
2 0xsupl8ge5SeLRvKHts8s7lEnlq2 0 days 00:00:01 1
3 0xsupl8ge5SeLRvKHts8s7lEnlq2 1 days 23:31:39 1
4 0xsupl8ge5SeLRvKHts8s7lEnlq2 0 days 00:00:29 2
5 0xsupl8ge5SeLRvKHts8s7lEnlq2 0 days 00:00:03 2
6 0xsupl8ge5SeLRvKHts8s7lEnlq2 0 days 11:00:03 2
7 0xsupl8ge5SeLRvKHts8s7lEnlq2 0 days 00:00:02 3
8 0xsupl8ge5SeLRvKHts8s7lEnlq2 0 days 00:00:07 3
这是代码:
df['timestamp'] = pd.to_datetime (df['timestamp'])
df['delta'] = (df['timestamp']-df['timestamp'].shift())
df['time'] = df['delta'].dt.total_seconds()
for item in df['time']:
if item <= 300:
df['setion'] = 1
else:
df['setion'] = 2
请注意,根据每个用户从屏幕移动到另一个屏幕所需的时间,会话数可能超过 3 个会话(会话数不限)。
我真的需要你的帮助
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)