使用 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
我有以下数据框:
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