Python:找到最多的时间重叠

时间:2016-03-02 11:47:31

标签: python overlap period

我有一个嵌套列表:

[['2012 Mar 03 23:39:46', '2012 Mar 03 23:39:58'], ['2012 Mar 03 23:32:46', '2012 Mar 03 23:32:46'], ['2012 Mar 03 23:12:19', '2012 Mar 03 23:12:19'], ['2012 Mar 03 23:06:50', '2012 Mar 03 23:08:03'], ['2012 Mar 03 22:57:28', '2012 Mar 03 22:57:28'], ['2012 Mar 03 22:47:00', '2012 Mar 03 22:47:00'], ['2012 Mar 03 22:45:45', '2012 Mar 03 22:45:45'], ['2012 Mar 03 22:37:41', '2012 Mar 03 22:37:41'], ['2012 Mar 03 22:35:15', '2012 Mar 03 22:35:15'], ...]

我希望在这些时间范围相互重叠时找到最高数字(例如,当有3个时间段相互重叠时,我想得到" 3")。此列表按降序排列。

我写了这段代码:

counter=list()
for i in range(len(sorted_times)):
    j=i
    while j < len(sorted_times):
        temp_counter=0
        if sorted_times[i][0] <= sorted_times[j][1]:
            temp_counter +=1
            j +=1
        else:
            counter.append(temp_counter)
            break

但是列表counter仅填充0。我之前使用pandasnumpy库解决了这个问题,我知道应该有两个重叠的时间范围。这次我想只使用内置的python库(时间或日期时间库除外)。

我不知道这段代码有什么问题。如果没有重叠的时间段,它至少应该返回一个满1秒的列表。

我希望我能够清楚地解释我的问题。这是我在这里发布的第一篇文章,所以如果有什么遗漏,我会提前抱歉。

修改

当蒂姆·卡斯特利伦斯(Tim Castelijns)闷闷不乐时,这是我的时间戳(浮点数)列表,我也试过了:

[[1330814386.0, 1330814398.0], [1330813966.0, 1330813966.0], [1330812739.0, 1330812739.0], [1330812410.0, 1330812483.0], [1330811848.0, 1330811848.0], [1330811220.0, 1330811220.0], [1330811145.0, 1330811145.0], [1330810661.0, 1330810661.0], [1330810515.0, 1330810515.0], [1330810361.0, 1330810417.0], [1330809037.0, 1330809037.0], [1330808213.0, 1330808213.0], [1330807897.0, 1330807897.0],

我发现为什么我的代码没有正常工作 - 我应该写道:

temp_counter=0
while j < len(sorted_times):

而不是:

while j < len(sorted_times):
    temp_counter=0

愚蠢的错误,我一天都看不到:(

不幸的是,我仍然没有得到与使用pandas相同的答案。当我使用pandas处理更大的数据样本(超过3000)时,我得到了数字9作为答案,并使用内置库得到5。使用time.strftime()或未转换的时间戳(秒)和使用pandas.to_datetime(df.timestamp, unit='s')之间有什么区别吗?我知道时区可能不同,但在这种情况下它不应该成为问题。

0 个答案:

没有答案