Pandas。滚动指定时间窗口和win_type

时间:2017-11-19 13:47:21

标签: python pandas time-series moving-average

我想使用pandas在不规则时间序列上使用时间窗来计算移动平均值。理想情况下,窗口应使用pandas.DataFrame.ewm进行指数加权,但参数(例如span)不接受基于时间的窗口。 如果我们尝试使用pandas.DataFrame.rolling,我们就会发现我们无法将基于时间的窗口与win_type结合使用。

dft = pd.DataFrame({'B': [0, 1, 2, 3, 4]},
                   index = pd.Index([pd.Timestamp('20130101 09:00:00'),
                                     pd.Timestamp('20130101 09:00:02'),
                                     pd.Timestamp('20130101 09:00:03'),
                                     pd.Timestamp('20130101 09:00:05'),
                                     pd.Timestamp('20130101 09:00:06')],
                                    name='foo'))
dft.rolling('2s', win_types='triang').sum()
>>> ValueError: Invalid window 2s

如何计算不规则时间序列中不等加权时间的移动平均值?

dft.ewm(alpha=0.9, adjust=False).sum()窗口关联的'2s'的预期输出为[0*1, 1*1, 2*1+1*0.9, 3*1, 4*1+3*0.9]

2 个答案:

答案 0 :(得分:0)

documentation 看来,参数窗口必须是样本数,而不是您想要的时间间隔。 也许您可以尝试重新采样您的时间序列以获得“常规”时间序列。 像这样:

dft = pd.DataFrame({'B': [0, 1, 2, 3, 4]},
                   index = pd.Index([pd.Timestamp('20130101 09:00:00'),
                                     pd.Timestamp('20130101 09:00:02'),
                                     pd.Timestamp('20130101 09:00:03'),
                                     pd.Timestamp('20130101 09:00:05'),
                                     pd.Timestamp('20130101 09:00:06')],
                                    name='foo'))
dft = dft.resample(rule='Xs').mean()
dft.rolling(Y, win_type='triang').sum()

其中 X 是重采样时间增量,Y 是 window 参数的整数。

答案 1 :(得分:-1)

这应该有效:

dft.rolling(2,freq='s' win_types='triang').sum()