У меня есть список значений с datetime:
Datetime Val
[[2017-01-01 15:00:00, 2],
[2017-02-05 19:00:00, 3],
[2018-04-22 15:00:00, 6],
[2018-08-02 13:00:00, 3],
[2018-10-03 12:00:00, 3]]
Я хочу сгруппировать значения в N одинаковых интервалов по дате и времени, а затем получить список cumprod of vals для каждой группы. Если группа пуста, cumprod равен 1.
Мой текущий подход - вычисление первой и последней отметки времени, затем использование linspace для вычисления одинаково разнесенных интервалов даты и времени, вот где я застрял:
n = 5 # 5 equally sized bins
start = pd.Timestamp(df.iloc[0]['datetime'])
end = pd.Timestamp(df.iloc[-1]['datetime'])
bins = np.linspace(start.value, end.value, n+1) # n+1 as linspace is right bound including
groups = pd.to_datetime(bins).values
Возвращает:
['2017-01-01T15:00:00.000000000' '2017-05-09T14:24:00.000000000'
'2017-09-14T13:48:00.000000000' '2018-01-20T13:12:00.000000000'
'2018-05-28T12:36:00.000000000' '2018-10-03T12:00:00.000000000']
Вывод с 5 одинаково разнесенными ячейками и приведенными выше примерами значений может быть, например:
output = [2*3, 1, 1, 6, 3*3] # 1 if there is no "Val" for a bin
Есть ли эффективный / чистый способ решить это? Я посмотрел в pd.Grouper, но не могу заставить работать значение freq для вывода одинаково распределенных групп даты и времени. Другое решение, которое я попробовал, - преобразование даты и времени в эпоху, а затем использование np.digitize для классификации по корзинам. Но это также не сработало. Цените любую помощь, также приветствуются решения Numpy.