计算大Pandas稀疏/不规则时间序列上的EWMA

2024-06-26 03:34:27 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑到以下高频但稀疏的时间序列:

#Sparse Timeseries
dti1 = pd.date_range(start=datetime(2015,8,1,9,0,0),periods=10,freq='ms')
dti2 = pd.date_range(start=datetime(2015,8,1,9,0,10),periods=10,freq='ms')
dti = dti1 + dti2

ts = pd.Series(index=dti, data=range(20))

我可以使用pandas函数计算半衰期为5ms的指数加权移动平均值,如下所示:

^{pr2}$

然而,在幕后,这个函数是以1ms的间隔重新采样我的时间序列(这是我提供的‘freq’)。这将导致输出中包含数千个额外的数据点。在

In [118]: len(ts)
Out[118]: 20
In [119]: len(ema)
Out[119]: 10010

这是不可伸缩的,因为我的real Timeseries包含数十万个间隔数分钟或数小时的高频观测。在

有没有一种Pandas/numpy的方法来计算稀疏时间序列的EMA而不需要重新采样?与此类似:http://oroboro.com/irregular-ema/

或者,我必须自己写吗?谢谢!在


Tags: datetimedate时间range序列startmspd
1条回答
网友
1楼 · 发布于 2024-06-26 03:34:27

您可以使用reindexewma结果与原始系列对齐。在

pd.ewma(ts, halflife=5, freq='ms').reindex(ts.index)

2015-08-01 09:00:00.000     0.0000
2015-08-01 09:00:00.001     0.5346
2015-08-01 09:00:00.002     1.0921
2015-08-01 09:00:00.003     1.6724
2015-08-01 09:00:00.004     2.2750
2015-08-01 09:00:00.005     2.8996
2015-08-01 09:00:00.006     3.5458
2015-08-01 09:00:00.007     4.2131
2015-08-01 09:00:00.008     4.9008
2015-08-01 09:00:00.009     5.6083
2015-08-01 09:00:10.000    10.0000
2015-08-01 09:00:10.001    10.5346
2015-08-01 09:00:10.002    11.0921
2015-08-01 09:00:10.003    11.6724
2015-08-01 09:00:10.004    12.2750
2015-08-01 09:00:10.005    12.8996
2015-08-01 09:00:10.006    13.5458
2015-08-01 09:00:10.007    14.2131
2015-08-01 09:00:10.008    14.9008
2015-08-01 09:00:10.009    15.6083
dtype: float64

相关问题 更多 >