Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:基于id和时间框架的对象组列表_Python_Sorting_Datetime_Group By_Itertools - Fatal编程技术网

Python:基于id和时间框架的对象组列表

Python:基于id和时间框架的对象组列表,python,sorting,datetime,group-by,itertools,Python,Sorting,Datetime,Group By,Itertools,我正在处理一个对象列表,其中sys_id和datetime是它的两个字段。如果每个对象之间的时间间隔小于5分钟,我想根据sys_id和datetime对这些对象进行分组 例如,如果我的数据是 测试id系统id时间 2018年1月11日6:03 2018年11月1日6:07 3 11 2018年1月1日6:11 2018年11月1日6:14 2018年5月12日1月2日15:25 2018年6月12日1月3日15:30 7 12 1/4/2018 15:33 2018年8月12日1月5日15:37

我正在处理一个对象列表,其中sys_id和datetime是它的两个字段。如果每个对象之间的时间间隔小于5分钟,我想根据sys_id和datetime对这些对象进行分组

例如,如果我的数据是

测试id系统id时间

2018年1月11日6:03

2018年11月1日6:07

3 11 2018年1月1日6:11

2018年11月1日6:14

2018年5月12日1月2日15:25

2018年6月12日1月3日15:30

7 12 1/4/2018 15:33

2018年8月12日1月5日15:37


我想将测试id 01、02、03、04分组为一个列表,因为它们具有相同的系统id,并且每个测试之间的时间间隔小于5分钟,而将测试id 05、06、07、08分组为另一个组。

首先按时间对记录进行排序。然后遍历记录,如果与最后一个条目的时差不超过5分钟,则将其追加到输出列表的最后一个子列表中;否则,将记录放入输出列表的新子列表中

from datetime import datetime, timedelta
data = [
    {'sys_id': 11, 'time': '1/1/18 6:00'},
    {'sys_id': 11, 'time': '1/1/18 6:03'},
    {'sys_id': 11, 'time': '1/1/18 6:07'},
    {'sys_id': 11, 'time': '1/1/18 6:11'},
    {'sys_id': 12, 'time': '1/1/18 15:25'},
    {'sys_id': 12, 'time': '1/1/18 15:30'},
    {'sys_id': 12, 'time': '1/1/18 15:33'},
    {'sys_id': 12, 'time': '1/1/18 6:37'},
]
def to_time(string):
    return datetime.strptime(string, '%m/%d/%y %H:%M')
data.sort(key=lambda record: to_time(record['time']))
output = []
for record in data:
    if output and to_time(record['time']) - to_time(output[-1][-1]['time']) <= timedelta(minutes=5):
        output[-1].append(record)
    else:
        output.append([record])
print(output)

请将数据框作为文本(而不是图像)发布
[
    [{'sys_id': 11, 'time': '1/1/18 6:00'}, {'sys_id': 11, 'time': '1/1/18 6:03'}, {'sys_id': 11, 'time': '1/1/18 6:07'}, {'sys_id': 11, 'time': '1/1/18 6:11'}],
    [{'sys_id': 12, 'time': '1/1/18 6:37'}],
    [{'sys_id': 12, 'time': '1/1/18 15:25'}, {'sys_id': 12, 'time': '1/1/18 15:30'}, {'sys_id': 12, 'time': '1/1/18 15:33'}]
]