当前位置 主页 > 服务器问题 > Linux/apache问题 >

    Pandas时间序列:重采样及频率转换方式

    栏目:Linux/apache问题 时间:2019-12-28 10:04

    如下所示:

    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进行重采样