gpt4 book ai didi

python - 在没有重叠的情况下查找时间序列数据中的总持续时间

转载 作者:太空宇宙 更新时间:2023-11-03 12:05:44 24 4
gpt4 key购买 nike

我有一个包含开始和结束时间戳的记录列表,如下所示:

[{u'end_time': 1444197616.0, u'start_time': u'2015-10-07T05:59:58Z'}, ...]

这些时间段可以重叠,我不知道如何找到没有重叠的总持续时间。例如:

BEGIN END
03:00 03:03
03:02 03:05
03:04 03:05
03:01 03:06
03:08 03:10

0 - 3
2 - 5
4 - 5
1 - 6
8 - 10

总计 = 8 分钟。

我想我可以通过找到差距来做到这一点,但是怎么做呢?

最佳答案

我将解决获取常规 float 范围的问题,它应该很容易扩展到日期时间......

假设数据是一系列 [start, end] 列表。如果不是这种格式,您可以轻松地将其转换为这种格式。

首先,我将按开始时间对数据进行排序。这使事情变得更容易,因为您现在知道索引 i + 1 的范围只能扩展索引 i 的范围,被索引 的范围包含i,或者让它成为下一个折叠范围的开始。

接下来,我将查看当前索引和下一个索引处范围的开始和结束。如果下一个索引的起点在当前范围内,您可以将其合并为一个。继续这样做,直到下一个索引的开始不在当前范围内,然后产生当前范围。我认为它应该看起来像这样:

def get_collapsed_ranges(ranges):
ranges = iter(sorted(ranges))
current_range = next(ranges)
for start, end in ranges:
if start > current_range[1]:
yield current_range
current_range = [start, end]
elif end > current_range[1]:
current_range[1] = end
yield current_range

我还没有对此进行广泛的测试,但它至少适用于您的测试数据:

>>> list(get_collapsed_ranges([[0,3], [2,5], [4,5], [1,6], [8,10]]))
[[0, 6], [8, 10]]

当然,从这里,要获得总持续时间,您可以对折叠范围和 Bob 是你叔叔的差异求和。

关于python - 在没有重叠的情况下查找时间序列数据中的总持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32985489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com