'both'、'neither',默认是 'right' 。
loffset参数来调整重新采样后的时间标签的偏移量 。'sum'函数的min_count参数来指定非NA值的最小数量 。默认情况下,Pandas的resample()方法使用Dataframe或Series的索引,这些索引应该是时间类型 。但是 , 如果希望基于特定列重新采样,则可以使用on参数 。这允许您选择一个特定的列进行重新采样 , 即使它不是索引 。
df.reset_index(drop=False, inplace=True) df.resample('W', on='index')['C_0'].sum().head()在这段代码中 , 使用resample()方法对'index'列执行每周重采样,计算每周'C_0'列的和 。
2、指定开始和结束的时间间隔
closed参数允许重采样期间控制打开和关闭间隔 。默认情况下,一些频率,如'M','A','Q', 'BM', 'BA','BQ'和'W'是右闭的,这意味着包括右边界,而其他频率是左闭的,其中包括左边界 。在转换数据频率时,可以根据需要手动设置关闭间隔 。
df = generate_sample_data_datetime() pd.concat([df.resample('W', closed='left')['C_0'].sum().to_frame(name='left_closed'), df.resample('W', closed='right')['C_0'].sum().to_frame(name='right_closed')], axis=1).head(5)在这段代码中,我们演示了将日频率转换为周频率时左闭间隔和右闭间隔的区别 。
3、输出结果控制
【时间序列的重采样和pandas的resample方法介绍】label参数可以在重采样期间控制输出结果的标签 。默认情况下,一些频率使用组内的右边界作为输出标签,而其他频率使用左边界 。在转换数据频率时,可以指定是要使用左边界还是右边界作为输出标签 。
df = generate_sample_data_datetime() df.resample('W', label='left')['C_0'].sum().to_frame(name='left_boundary').head(5) df.resample('W', label='right')['C_0'].sum().to_frame(name='right_boundary').head(5)在这段代码中,输出标签是根据在label参数中指定“left”还是“right”而变化的,建议在实际应用时显式指定 , 这样可以减少混淆 。
4、汇总统计数据
重采样可以执行聚合统计,类似于使用groupby 。使用sum、mean、min、max等聚合方法来汇总重新采样间隔内的数据 。这些聚合方法类似于groupby操作可用的聚合方法 。
df.resample('D').sum() df.resample('W').mean() df.resample('M').min() df.resample('Q').max() df.resample('Y').count() df.resample('W').std() df.resample('M').var() df.resample('D').median() df.resample('M').quantile([0.25, 0.5, 0.75]) custom_agg = lambda x: x.max() - x.min() df.resample('W').Apply(custom_agg)上采样和填充在时间序列数据分析中,上采样和下采样是用来操纵数据观测频率的技术 。这些技术对于调整时间序列数据的粒度以匹配分析需求非常有价值 。
我们先生成一些数据
import pandas as pd import numpy as np def generate_sample_data_datetime(): np.random.seed(123) number_of_rows = 365 * 2 num_cols = 5 start_date = '2023-09-15' # You can change the start date if needed cols = ["C_0", "C_1", "C_2", "C_3", "C_4"] df = pd.DataFrame(np.random.randint(1, 100, size=(number_of_rows, num_cols)), columns=cols) df.index = pd.date_range(start=start_date, periods=number_of_rows) return df df = generate_sample_data_datetime()上采样包括增加数据的粒度,这意味着将数据从较低的频率转换为较高的频率 。
假设您有上面生成的每日数据 , 并希望将其转换为12小时的频率 , 并在每个间隔内计算“C_0”的总和:
df.resample('12H')['C_0'].sum().head(10)代码将数据重采样为12小时的间隔,并在每个间隔内对' C_0 '应用总和聚合 。这个.head(10)用于显示结果的前10行 。
在上采样过程中 , 特别是从较低频率转换到较高频率时 , 由于新频率引入了间隙,会遇到丢失数据点的情况 。所以需要对间隙的数据进行填充,填充一般使用以下几个方法:
推荐阅读
- 【干货分享】以太网布线的秘密要点:连接器和电缆管理全解析
- Python构建高效安全的OTP验证系统!
- ios17可以降级吗?iOS17退回iOS16的方法及步骤
- 展现气质的秘密武器:女性的翡翠项链
- 人工钻石是莫桑钻吗?莫桑钻可以人工合成吗?莫桑钻和钻石的区别是什么?
- 手镯圈口测量时的注意事项
- 手镯大小、形状与材质:和谐搭配的关键
- 人死后还有来生吗?霍金和爱因斯坦的观点不谋而和
- 中国警车为何有的喷印“警察”,有的喷印“公安”?二者有何区别
- 涤纶面料的优缺点及保养
