基于pandas中的时间戳创建交互会话

2024-04-27 14:35:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试定义在不同的移动使用会话中使用了哪些应用程序。基本上,会话是由 在很短的时间内(又名。会话增量)。换言之,如果在前一个5分钟内没有任何互动发生 交互,则用户的会话被视为关闭。下一个 互动被认为是一个单独的会议。我想知道数据集中有多少个移动会话。另外,我想知道在每一次会议中都推出了哪些应用程序。 数据框中的所有行都有时间戳。 以下是来自数据集的示例:

        timestamp               App
6784    2018-04-08 14:31:29.209 Google
6785    2018-04-08 14:58:42.875 Google
6786    2018-04-08 18:18:04.757 Chrome
6787    2018-04-08 21:08:41.368 Google
6788    2018-04-11 10:53:10.744 Google
6789    2018-04-14 19:54:37.441 Google
6790    2018-04-14 19:54:59.833 Google
6791    2018-04-14 19:55:10.844 YouTube
6792    2018-04-14 19:55:34.486 Google
6793    2018-04-14 20:23:00.315 Google
6794    2018-04-15 08:23:44.873 Google
6795    2018-04-15 08:24:07.257 Google
6796    2018-04-16 16:42:35.538 Google
6797    2018-04-16 16:42:48.351 Google
6798    2018-04-17 08:10:54.734 Google
6799    2018-04-17 08:13:28.855 Google
6800    2018-04-17 08:16:49.408 Google
6801    2018-04-17 08:18:55.049 Google
6802    2018-04-17 08:21:04.201 Google
6803    2018-04-17 08:26:14.254 Google

这是期望的输出:

^{pr2}$

Tags: 数据用户app应用程序示例定义youtubegoogle
2条回答

可能还有比这更有效的方法,但您可以得到如下值:

(在你有了SessionID之后)

from collections import defaultdict

d = defaultdict(dict)
for k,v in df.groupby('SessionID')['App'].value_counts().items():
    d[k[0]].update({k[1]:v})

d

^{pr2}$

你可以得到的总和是:

^{3}$

我想你想要.shift+.cumsum()

+1是因为第一行总是NaT,对于比较,它的计算结果是False,否则它总是从0开始{}。在

import pandas as pd
df['SessionID'] = (df.timestamp-df.timestamp.shift(1) > pd.Timedelta(5, 'm')).cumsum()+1

                   timestamp      App  SessionID
6784 2018-04-08 14:31:29.209   Google          1
6785 2018-04-08 14:58:42.875   Google          2
6786 2018-04-08 18:18:04.757   Chrome          3
6787 2018-04-08 21:08:41.368   Google          4
6788 2018-04-11 10:53:10.744   Google          5
6789 2018-04-14 19:54:37.441   Google          6
6790 2018-04-14 19:54:59.833   Google          6
6791 2018-04-14 19:55:10.844  YouTube          6
6792 2018-04-14 19:55:34.486   Google          6
6793 2018-04-14 20:23:00.315   Google          7
6794 2018-04-15 08:23:44.873   Google          8
6795 2018-04-15 08:24:07.257   Google          8
6796 2018-04-16 16:42:35.538   Google          9
6797 2018-04-16 16:42:48.351   Google          9
6798 2018-04-17 08:10:54.734   Google         10
6799 2018-04-17 08:13:28.855   Google         10
6800 2018-04-17 08:16:49.408   Google         10
6801 2018-04-17 08:18:55.049   Google         10
6802 2018-04-17 08:21:04.201   Google         10
6803 2018-04-17 08:26:14.254   Google         11

如果您还有UserID,那么您就可以实现这样的逻辑:当时间大于5分钟或userID发生变化时,您可以在其中增加ID。通过以下方式实现:

^{pr2}$

退货:

^{3}$

相关问题 更多 >