当前位置 主页 > 服务器问题 > Linux/apache问题 >
如下所示:
import pandas as pd import numpy as np
一、介绍
重采样(resampling)指的是将时间序列从一个频率转换到另一个频率的处理过程;
将高频率(间隔短)数据聚合到低频率(间隔长)称为降采样(downsampling);
将低频率数据转换到高频率则称为升采样(unsampling);
有些采样即不是降采样也不是升采样,例如将W-WED(每周三)转换为W-FRI;
二、resample方法–转换频率的主力函数
rng = pd.date_range('1/1/2000',periods=100,freq='D') ts = pd.Series(np.random.randn(len(rng)),index=rng) ts.resample('M').mean() # 将100天按月进行降采样(聚合)
2000-01-31 -0.156092 2000-02-29 0.060607 2000-03-31 -0.039608 2000-04-30 -0.154838 Freq: M, dtype: float64
ts.resample('M',kind='period').mean()
2000-01 -0.156092 2000-02 0.060607 2000-03 -0.039608 2000-04 -0.154838 Freq: M, dtype: float64
三、降采样(聚合)
1.降采样面元(区间)默认才有左闭右开的形式,而且聚合的索引是以左边界标记
rng = pd.date_range('1/1/2000',periods=12,freq='T') ts = pd.Series(np.arange(12),index=rng) ts
2000-01-01 00:00:00 0 2000-01-01 00:01:00 1 2000-01-01 00:02:00 2 2000-01-01 00:03:00 3 2000-01-01 00:04:00 4 2000-01-01 00:05:00 5 2000-01-01 00:06:00 6 2000-01-01 00:07:00 7 2000-01-01 00:08:00 8 2000-01-01 00:09:00 9 2000-01-01 00:10:00 10 2000-01-01 00:11:00 11 Freq: T, dtype: int32
ts.resample('5min').sum()
2000-01-01 00:00:00 10 2000-01-01 00:05:00 35 2000-01-01 00:10:00 21 Freq: 5T, dtype: int32
2.通过参数closed='right'可以实现左开右闭
ts.resample('5min',closed='right').sum()
1999-12-31 23:55:00 0 2000-01-01 00:00:00 15 2000-01-01 00:05:00 40 2000-01-01 00:10:00 11 Freq: 5T, dtype: int32
3.通过参数label='right'可以实现以右边界为聚合后的标签
ts.resample('5min',closed='right',label='right').sum()
2000-01-01 00:00:00 0 2000-01-01 00:05:00 15 2000-01-01 00:10:00 40 2000-01-01 00:15:00 11 Freq: 5T, dtype: int32
4.通过参数loffset可以实现精准的调整标签
ts.resample('5min',closed='right',loffset='-1s').sum()
1999-12-31 23:54:59 0 1999-12-31 23:59:59 15 2000-01-01 00:04:59 40 2000-01-01 00:09:59 11 Freq: 5T, dtype: int32
四、OHLC重采样
在金融领域常用的聚合方式–OHLC,它会计算各个面元的:第一个值(开盘)、最后一个值(收盘)、最大值和最小值,并产生一个DataFrame
print(ts.resample('5min').ohlc())
open high low close 2000-01-01 00:00:00 0 4 0 4 2000-01-01 00:05:00 5 9 5 9 2000-01-01 00:10:00 10 11 10 11
五、通过groupby进行重采样