聚合日期时间

时间:2016-01-17 20:23:04

标签: datetime python-3.x

我正在使用此格式(12/9/2015 6:11)解析一个具有日期时间(实际上是csv文件中的字符串)的列的文件,并在第二列中解析整数值。

日期时间值跨越几周,但不包括每天的每一分钟。

我想做以下事情: - 对于文件中的每一分钟,从包含该分钟加上接下来的5分钟的任何值计算第2列值的总和。下面是一个示例输入和一个所需的输出样本:

输入

Col1, Col2

12/9/2015 6:12, 5
12/9/2015 6:13, 10
12/9/2015 6:13, 15
12/9/2015 6:14, 10
12/9/2015 6:27, 5

所需输出

12/9/2015 6:12, 40
12/9/2015 6:13, 35
12/9/2015 6:14, 10
12/9/2015 6:27, 5

有关如何处理此事的任何想法?

1 个答案:

答案 0 :(得分:0)

from collections import defaultdict
from datetime import datetime, timedelta

input = '''12/9/2015 6:12, 5
12/9/2015 6:13, 10
12/9/2015 6:13, 15
12/9/2015 6:14, 10
12/9/2015 6:27, 5'''

parsed = defaultdict(int)

for line in input.splitlines():
    date_str, v = line.split(',')
    parsed[datetime.strptime(date_str, '%m/%d/%Y %H:%M')] += int(v)

final = {}
for dt, v in parsed.items():
    candidates_dt = [dt + timedelta(minutes=i) for i in range(6)]
    final[dt] = sum(parsed[candidate_dt]
                    for candidate_dt
                    in candidates_dt
                    if candidate_dt in parsed)

print parsed
{
    datetime.datetime(2015, 12, 9, 6, 27): 5,
    datetime.datetime(2015, 12, 9, 6, 14): 10,
    datetime.datetime(2015, 12, 9, 6, 13): 35,
    datetime.datetime(2015, 12, 9, 6, 12): 40
}

瞧! :)

<强>解释

  1. 您/可能在文件中有多行具有相同的日期

    - &GT;我使用defaultdict(int)为每个日期创建唯一键能够在阅读文件时添加该日期找到的每个值

  2. 然后,对于从文件中读取的每个日期/值总和,我生成该日期的下一个5分钟总和如果在文件中的初始解析数据中找到以下每个日期的值