请帮我找到一个不需要大量循环的解决方案。我有一个时间戳列表,例如

["2014-04-11 08:00:00.000000",
 "2014-04-11 09:35:00.000000",
 "2014-04-11 09:35:00.000000",
 "2014-04-11 09:40:00.000000",
 "2014-04-11 11:00:00.000000",
 ...]

我想“合并”列表中的时间戳,以便彼此的公共(public)窗口(例如 10 分钟)内的时间戳成为一个条目。所以上面的例子列表将变成
["2014-04-11 08:00:00.000000",
 "2014-04-11 09:35:00.000000",
 "2014-04-11 11:00:00.000000",
 ...]

还要注意合并的三个时间戳是“9:35”值而不是“9:40”。我想合并时间戳以转到最频繁的条目。如果有平局,则在较早/最频繁的时间戳上合并。

而且我还试图跟踪有多少时间戳被合并。因此,对于上述示例,保留计数的列表将是 [1,3,1,...]

最佳答案

这可以解决如下:

import datetime

data = ["2014-04-11 08:00:00.000000", "2014-04-11 09:35:00.000000", "2014-04-11 09:35:00.000000", "2014-04-11 09:40:00.000000", "2014-04-11 11:00:00.000000"]

delta = datetime.timedelta(minutes=10)
result = []
bucket = []
current = None
for item in data:
    datetime_obj = datetime.datetime.strptime(item, '%Y-%m-%d %H:%S:%M.%f')
    if current is None:
        current = datetime_obj
        bucket = [current]
        continue
    if (datetime_obj - current) <= delta:
        bucket.append(datetime_obj)
    else:
        result.append(bucket)
        current = datetime_obj
        bucket = [current]

if bucket:
    result.append(bucket)

for bucket in result:
    print(bucket)

例子:
>>> for bucket in result:
...     print(bucket)
...
[datetime.datetime(2014, 4, 11, 8, 0)]
[datetime.datetime(2014, 4, 11, 9, 0, 35), datetime.datetime(2014, 4, 11, 9, 0, 40)]
[datetime.datetime(2014, 4, 11, 11, 0)]

result 数据结构可用于计算所需的值:标识窗口的每个时间戳以及创建该窗口可用(“已消耗”)的时间戳数。

关于python - 合并 Python 中的时间戳列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28057544/

10-16 08:15