使用 rolling() 函数和基于时间的数据计算简单移动平均线

Calculating simple moving averages using rolling() function with time-based data

我有以下数据框:

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() 函数,但我可以指定一个 window 用于滚动计算的数据点数,我可以为每 24- 有不同数量的数据点一个小时的时间,这么简单的滚动功能对我来说不起作用。

我考虑过按日期对数据帧进行重采样,但那样也行不通。

不确定如何解决这个问题。非常欢迎任何建议。

您可以设置日期为索引,然后使用pandas滚动功能,为window设置时间段。

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