Python - 使用按日期分组的日期时间迭代数组

时间:2017-11-29 01:49:11

标签: python arrays loops datetime

我有一个二维数组,其中一个有序列包含日期时间:

01/01/2000 06:30:00, string, string
01/01/2000 08:30:00, string, string
01/01/2000 10:30:00, string, string
...
02/01/2000 06:30:00, string, string
02/01/2000 08:30:00, string, string
02/01/2000 10:30:00, string, string

当我遍历数组时,我不想对每个元素执行操作,而是希望它将它们分组为舍入日期,将其作为子集处理,然后转到下一个组以进行下一个日期。

感觉有点笨拙,但是我需要一行一行地把它们收集到临时数组中,工作,冲洗,然后继续前进?或者是否有一个Python设施可以用这种方式处理日期和时间的更优雅的迭代器?

1 个答案:

答案 0 :(得分:0)

您应该可以使用groupby将它们列入列表。

我有有序数据的示例列表,其中datetime是第一个元素,我希望我明白你的意思:

old = [[datetime.datetime(2017, 1, 1, 3, 0), 'test'], 
       [datetime.datetime(2017, 1, 1, 6, 0), 'test'], 
       [datetime.datetime(2017, 1, 1, 9, 0), 'test'], 
       [datetime.datetime(2017, 1, 2, 9, 0), 'test'], 
       [datetime.datetime(2017, 1, 2, 12, 0), 'test'], 
       [datetime.datetime(2017, 1, 3, 2, 0), 'test'], 
       [datetime.datetime(2017, 1, 3, 8, 0), 'test']]

您可以使用lambda函数执行操作,并按日期/时间进行比较/分组。例如,现在我只按日期分组。

from itertools import groupby
new = []
for key, group in groupby(old, lambda x: x[0].date()):
    new.append(list(group))

结果是按日期分组的列表列表。

[[[datetime.datetime(2017, 1, 1, 3, 0), 'test'],
  [datetime.datetime(2017, 1, 1, 6, 0), 'test'],
  [datetime.datetime(2017, 1, 1, 9, 0), 'test']],
 [[datetime.datetime(2017, 1, 2, 9, 0), 'test'],
  [datetime.datetime(2017, 1, 2, 12, 0), 'test']],
 [[datetime.datetime(2017, 1, 3, 2, 0), 'test'],
  [datetime.datetime(2017, 1, 3, 8, 0), 'test']]]