每15分钟汇总一次时间戳,并使用Pandas计算其关联值的总和

时间:2019-01-23 01:26:29

标签: datetime timestamp aggregation

我有一个包含两列(时间戳,值)的数据集。

现在,我必须将时间戳记的值汇总到每15分钟一次(创建一个新的数据帧,该数据帧包含两列:一列是每15分钟的新时间戳记,而第二列是合计值),并计算与每个时间戳记对应的值的总和new新数据框中的第二列总值。

这是我的样本数据集的样子:

timestamp           value
2018-03-30 23:59:13.000 647
2018-03-30 23:53:12.000 1297
2018-03-30 23:51:35.000 647
2018-03-30 23:54:21.000 1502
2018-03-30 23:52:40.000 287
2018-03-30 23:45:52.000 1287
2018-03-30 23:51:42.000 636
2018-03-30 23:46:28.000 310
2018-03-30 23:46:04.000 511
2018-03-30 23:48:16.000 292
2018-03-30 23:44:34.000 343
2018-03-30 23:44:53.000 288
2018-03-30 23:37:41.000 287
2018-03-30 23:37:40.000 356
2018-03-30 23:40:38.000 647
2018-03-30 23:40:29.000 288
2018-03-30 23:36:18.000 597
2018-03-30 23:33:28.000 307
2018-03-30 23:35:14.373 287

预期输出:

timestamp               totalValue
2018-03-30 23:59:59.000 7416
2018-03-30 23:45:00.000 3400

实际数据集包含约2000万行

我设计了一个可以按预期工作的解决方案,但是要花很多时间才能执行。以下是我的解决方案:

# prepare and group the data
from itertools import groupby
from datetime import datetime, timedelta

def get_key(d):
    # group by 15 minutes
    k = d + timedelta(minutes=-(d.minute % 15))
    return datetime(k.year, k.month, k.day, k.hour, k.minute, 0)

g = groupby(sorted(inputData['dt_ts_when']), key=get_key)

aggregateTimeIntervalList = []

for key, items in g:
    tempList = []
    count = 0
    for item in items:
        item = item.strftime("%Y-%m-%d %H:%M:%S")
        timerequiredSeries = (inputData[inputData['timestamp'].str.contains(item, regex=False, na=False)]['value']).tolist()        
        for val in timerequiredSeries:
            count += val
    tempList.append(count)
    tempList.append(key)
    aggregateTimeIntervalList.append(tempList)
print("Done")

哪里

inputData['timestamp']是“时间戳记”列,而inputData['value']是“值”列。

请帮助我设计更好的解决方案

0 个答案:

没有答案