У меня есть набор данных, который содержит два столбца (метка времени, значение).
Теперь мне нужно агрегировать значение метки времени каждые 15 минут (создать новый фрейм данных, имеющий два столбца: один - новую метку времени для каждых 15 минут, а второй - общее значение) и вычислить сумму значения, соответствующего каждой метке времени. новое общее значение второго столбца в новом фрейме данных.
Вот как выглядит мой примерный набор данных:
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
Фактический набор данных содержит ~ 20000000 строк
Я разработал решение, которое работает так, как ожидалось, но на его выполнение уходит много времени. Ниже мое решение:
# 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']
- столбец значения.
Пожалуйста, помогите мне найти лучшее решение