Вычисление простых скользящих средних с использованием функции roll () с данными на основе времени - PullRequest
1 голос
/ 13 апреля 2020

У меня есть следующий DataFrame:

dates = ['2018-01-03 23:26:00', '2018-01-04 00:14:00', '2018-01-04 03:10:00', '2018-01-05 03:47:00',
'2018-01-05 04:47:00', '2018-01-06 05:44:00', '2018-01-06 19:00:00', '2018-01-06 20:36:00',
'2018-01-07 21:34:00']

vals = [59.95, 60.11, 62.05, 59.98, 60.01, 61.15, 60.35, 60.61, 59.99]

temp = pd.DataFrame({'date':dates, 'values':vals})

Мне нужно получить скользящие средние за последние 24 часа. Я попытался использовать функцию pandas 'rolling(), но там я могу указать окно с количеством точек данных для использования в скользящих вычислениях, у меня может быть разное количество точек данных для каждого 24-часового периода, поэтому простое использование Функция скручивания у меня не работает.

Я думал о пересэмплировании данных по дате, к тому же это не сработало бы.

Не знаю, как к этому подойти. Любые предложения будут приветствоваться.

1 Ответ

1 голос
/ 13 апреля 2020

Вы можете установить дату в качестве индекса, а затем использовать функцию прокрутки pandas с установленным периодом времени для окна.

import pandas as pd

dates = ['2018-01-03 23:26:00', '2018-01-04 00:14:00', '2018-01-04 03:10:00', '2018-01-05 03:47:00',
'2018-01-05 04:47:00', '2018-01-06 05:44:00', '2018-01-06 19:00:00', '2018-01-06 20:36:00',
'2018-01-07 21:34:00']

vals = [59.95, 60.11, 62.05, 59.98, 60.01, 61.15, 60.35, 60.61, 59.99]

temp = pd.DataFrame({'values':vals})
temp.index = [pd.Timestamp(date) for date in dates]

# create a new column with rolling average values
temp['rolling_avg'] = temp.rolling('24h', min_periods=1).mean()

Вывод:

>>> temp
                     values  rolling_avg
2018-01-03 23:26:00   59.95    59.950000
2018-01-04 00:14:00   60.11    60.030000
2018-01-04 03:10:00   62.05    60.703333
2018-01-05 03:47:00   59.98    59.980000
2018-01-05 04:47:00   60.01    59.995000
2018-01-06 05:44:00   61.15    61.150000
2018-01-06 19:00:00   60.35    60.750000
2018-01-06 20:36:00   60.61    60.703333
2018-01-07 21:34:00   59.99    59.990000
...