如果时间戳差异不超过 5 分钟,如何将时间戳差异放入多个会话中?

问题描述

我有下面的数据框,我希望在数据框中创建一个名为“会话”的新列。如果用户花费的时间超过 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 (将#修改为@)