如下所示:
import pandas as pdimport 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.1560922000-02-29 0.0606072000-03-31 -0.0396082000-04-30 -0.154838Freq: M, dtype: float64
ts.resample('M',kind='period').mean()
2000-01 -0.1560922000-02 0.0606072000-03 -0.0396082000-04 -0.154838Freq: 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 02000-01-01 00:01:00 12000-01-01 00:02:00 22000-01-01 00:03:00 32000-01-01 00:04:00 42000-01-01 00:05:00 52000-01-01 00:06:00 62000-01-01 00:07:00 72000-01-01 00:08:00 82000-01-01 00:09:00 92000-01-01 00:10:00 102000-01-01 00:11:00 11Freq: T, dtype: int32
ts.resample('5min').sum()
2000-01-01 00:00:00 102000-01-01 00:05:00 352000-01-01 00:10:00 21Freq: 5T, dtype: int32
2.通过参数closed='right'可以实现左开右闭
ts.resample('5min',closed='right').sum()
1999-12-31 23:55:00 02000-01-01 00:00:00 152000-01-01 00:05:00 402000-01-01 00:10:00 11Freq: 5T, dtype: int32
3.通过参数label='right'可以实现以右边界为聚合后的标签
ts.resample('5min',closed='right',label='right').sum()
2000-01-01 00:00:00 02000-01-01 00:05:00 152000-01-01 00:10:00 402000-01-01 00:15:00 11Freq: 5T, dtype: int32
4.通过参数loffset可以实现精准的调整标签
ts.resample('5min',closed='right',loffset='-1s').sum()
1999-12-31 23:54:59 01999-12-31 23:59:59 152000-01-01 00:04:59 402000-01-01 00:09:59 11Freq: 5T, dtype: int32
四、OHLC重采样
在金融领域常用的聚合方式 OHLC,它会计算各个面元的:第一个值(开盘)、最后一个值(收盘)、最大值和最小值,并产生一个DataFrame
print(ts.resample('5min').ohlc())
open high low close2000-01-01 00:00:00 0 4 0 42000-01-01 00:05:00 5 9 5 92000-01-01 00:10:00 10 11 10 11
五、通过groupby进行重采样
新闻热点
疑难解答