我有一个包含两列(时间戳,值)的数据集。
现在,我必须将时间戳记的值汇总到每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']
是“值”列。
请帮助我设计更好的解决方案