python-3.x - 如果时间戳的差异不超过 5 分钟,如何将时间戳的差异放入多个会话中?
问题描述
我有下面的数据框,我希望在数据框中创建一个名为“会话”的新列。如果用户花费超过 5 分钟(5*60 = 300 秒),则将创建新会话。每个用户从一个屏幕移动到另一个屏幕所花费的时间(经过的时间)在 Dataframe 的“delta”列中表示。
最大会话不超过 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 个会话(会话数不限)。
我真的需要你的帮助
解决方案
推荐阅读
- python - 无法使 drf 路由器以某种方式工作
- go - 如何使用 discordgo 创建频道
- java - 在 android studio 的字符串资源文件中有一个变化的变量
- r - 如何根据 2 列中的值给出的日期范围删除行?
- java - 当我在 SVG 中将鼠标悬停时,如何显示和隐藏同级元素?
- java - 为testng Spring配置H2数据库
- php - 用户阻止了 symfony 4.4 上的 SetCookie
- jenkins - Jenkins - 丢弃旧版本中的特定工件
- python - 如何将 Python 字典转换为 Numpy 数组?
- ibm-doors - 如何从 DXL 跳过列表中删除所有元素