下表显示了给定软件的登录和注销时间。你知道吗
USER_NAME USER_ROLE GMT_LOGIN_TIME GMT_LOGOUT_TIME LOGIN_DURATION
ABCD SUP_235 2017-12-15 11:05:25 2017-12-15 11:09:01 216.0
ABCE SUP_235 2017-12-15 11:23:14 2017-12-15 11:33:17 603.0
ABCF USER_285 2017-12-15 11:44:12 2017-12-15 12:07:52 1420.0
ABCG SUP_230 2017-12-15 18:43:17 2017-12-15 19:00:20 1023.0
ABCH USER_245 2017-12-15 10:36:59 2017-12-15 11:42:00 3901.0
如何识别同时使用的用户?我将不得不用Python来做这件事,但我不担心用那种编程语言实现。我想了解逻辑本身。你知道吗
在上述示例中,用户ABCD、ABCE和ABCH是唯一同时出现的。你知道吗
下面是一种使用
pandas
的方法:输出:
这是正确的,因为
ABCD
和ABCE
都与ABCH
同时发生。你知道吗逻辑解释:
我们循环遍历数据帧的每一行,并获取该用户的
login
和logout
时间。接下来我们要检查所有其他行是否有重叠,因此我们创建
this_index
作为指向当前行的索引器。使用位反转运算符(~
),我们可以用df[~this_index]
选择其他行。对于其他行,我们使用
any
函数检查它们是否满足overlap condition。因为它返回boolean
,所以我们转换为int
。如果您想查看有多少其他连接与此连接重叠,我们也可以使用sum(condition)
。int(any(condition))
的结果放入'simultaneous'
列。请参阅本页了解重叠时间范围背后的逻辑: Determine Whether Two Date Ranges Overlap
编辑:一种更大的方式
在pandas中循环行对于大型表来说很慢。下面是一种使用
pandas.Dataframe.apply()
实现相同结果的方法,应该更快。你知道吗相关问题 更多 >
编程相关推荐