时间序列的重采样和pandas的resample方法介绍( 三 )


向前填充-前一个可用的值填充缺失的值 。可以使用limit参数限制正向填充的数量 。
 df.resample('8H')['C_0'].ffill(limit=1)反向填充 -用下一个可用的值填充缺失的值 。
 df.resample('8H')['C_0'].bfill(limit=1)最近填充 -用最近的可用值填充缺失的数据,该值可以是向前的,也可以是向后的 。
 df.resample('8H')['C_0'].nearest(limit=1)Fillna —结合了前面三个方法的功能 。可以指定方法(例如,'pad'/' fill','bfill','nearest'),并使用limit参数进行数量控制 。
 df.resample('8H')['C_0'].fillna(method='pad', limit=1)Asfreq-指定一个固定的值来填充所有缺失的部分一次 。例如 , 可以使用-999填充缺失的值 。
 df.resample('8H')['C_0'].asfreq(-999)插值方法-可以应用各种插值算法 。
 df.resample('8H').interpolate(method='linear').applymap(lambda x: round(x, 2))一些常用的函数1、使用agg进行聚合
 result = df.resample('W').agg(    {        'C_0': ['sum', 'mean'],        'C_1': lambda x: np.std(x, ddof=1)    } ).head()使用agg方法将每日时间序列数据重新采样到每周频率 。并为不同的列指定不同的聚合函数 。对于“C_0”,计算总和和平均值 , 而对于“C_1” , 计算标准差 。
2、使用 apply  聚合
 def custom_agg(x):    agg_result = {        'C_0_mean': round(x['C_0'].mean(), 2),        'C_1_sum': x['C_1'].sum(),        'C_2_max': x['C_2'].max(),        'C_3_mean_plus1': round(x['C_3'].mean() + 1, 2)    }    return pd.Series(agg_result)  result = df.resample('W').apply(custom_agg).head()定义了一个名为custom_agg的自定义聚合函数,它将DataFrame x作为输入,并在不同列上计算各种聚合 。使用apply方法将数据重新采样到每周的频率,并应用自定义聚合函数 。
3、使用transform进行变换
 df['C_0_cumsum'] = df.resample('W')['C_0'].transform('cumsum') df['C_0_rank'] = df.resample('W')['C_0'].transform('rank') result = df.head(10)使用transform 方法来计算每周组中'C_0'变量的累积和排名 。DF的原始索引结构保持不变 。
4、使用pipe 进行管道操作
 result = df.resample('W')['C_0', 'C_1']     .pipe(lambda x: x.cumsum())     .pipe(lambda x: x['C_1'] - x['C_0']) result = result.head(10)使用管道方法对下采样的'C_0'和'C_1'变量进行链式操作 。cumsum函数计算累积和,第二个管道操作计算每个组的'C_1'和'C_0'之间的差值 。像管道一样执行顺序操作 。
总结时间序列的重采样是将时间序列数据从一个时间频率(例如每日)转换为另一个时间频率(例如每月或每年) , 并且通常伴随着对数据进行聚合操作 。重采样是时间序列数据处理中的一个关键操作,通过进行重采样可以更好地理解数据的趋势和模式 。
在Python/ target=_blank class=infotextkey>Python中,可以使用Pandas库的resample()方法来执行时间序列的重采样 。
 
作者:JIN




推荐阅读