我有记录kiosk机器使用情况的事务日志,以及机器在线/离线时间的另一组日志。事务日志包含一个日期时间字段,它可以让您知道事务(或会话)发生的时间。
event_date raw_data1 session_id ws_id
0 2017-11-06 12:13:06 {'description': 'Home'} 0604e80d-1ae6-48d0-81bf-32ca1dc58e4c machine2
1 2017-11-06 12:13:41 {'description': 'AreYouStillThere'} 0604e80d-1ae6-48d0-81bf-32ca1dc58e4c machine2
2 2017-11-06 12:14:09 {'description': 'AttractiveAnimation'} 0604e80d-1ae6-48d0-81bf-32ca1dc58e4c machine2
3 2017-11-07 10:06:15 {'description': 'Home'} e2e7565f-60b4-4e7b-a8f0-d0a9c384b283 machine13
4 2017-11-07 10:06:27 {'description': 'AuthenticationPanelAdmin'} e2e7565f-60b4-4e7b-a8f0-d0a9c384b283 machine13此函数目标是查看哪个session_ids与离线日志一致
dtrange start end status machine_id
0 DateTimeTZRange(datetime.datetime(2017, 11, 17... 2017-11-17 14:46:15 2017-11-17 15:01:15 2 12
1 DateTimeTZRange(datetime.datetime(2017, 11, 17... 2017-11-17 14:47:02 2017-11-17 15:02:02 2 22
2 DateTimeTZRange(datetime.datetime(2017, 11, 17... 2017-11-17 14:47:23 2017-11-17 15:02:23 2 18
3 DateTimeTZRange(datetime.datetime(2017, 11, 17... 2017-11-17 14:48:09 2017-11-17 15:03:09 2 17
4 DateTimeTZRange(datetime.datetime(2017, 11, 17... 2017-11-17 14:49:18 2017-11-17 15:04:18 2 15ws_id和machine_id是相同的,这使得它变得有点棘手,因为会话时间和machine_id必须在两个数据帧中匹配。
这是我用来返回当机器脱机时发生的所有session_ids的代码。它使用事务数据帧中的每一行过滤离线数据帧,如果离线事件与会话时间重合,则返回session_id:
def CheckSession(machinename, sessiontime, sessionid):
if len(offlinedf[(offlinedf.start<sessiontime)
&(offlinedf.end>sessiontime)
&(offlinedf.name==machinename)])>0:
return sessionid
sessions = df.apply(lambda row: CheckSession(row["name"], row["created_at1"], row["session_id"]), axis=1)这将构建会话列表,但它非常慢,并且数据帧非常大。我仍然在学习如何最好地使用pandas库-我希望使用一些矢量化来优化它,但还不能解决如何以这种方式构建它。
发布于 2018-05-02 23:27:02
https://stackoverflow.com/questions/50136587
复制相似问题