如何对Pandas时间序列进行反向重采样?
实现Pandas时间序列反向重采样(以区间结束时间为标签)
你可以通过反转序列后再重采样的方式快速实现需求,步骤如下:
步骤1:生成测试数据(你的原代码)
import pandas as pd import numpy as np index = pd.date_range('01-01-2018 00:00:00', '01-11-2018 23:59:00', freq='1T') randint = np.random.randint(low=0, high=9, size=(len(index), 1)) df = pd.DataFrame(randint, index=index, columns=['random'])
步骤2:反转序列+重采样+调整顺序
# 1. 将原序列反转(从最晚时间到最早时间排列) df_reversed = df.iloc[::-1] # 2. 对反转后的序列重采样: # - freq='5T':按5分钟区间聚合 # - label='right':用区间的结束时间作为标签(对应原序列中该区间的最晚时间) # - closed='right':区间包含右边界(确保最后一个时间点被包含在第一个分组) ohlc_reversed = df_reversed.resample('5T', label='right', closed='right')['random'].ohlc() # 3. 将结果按时间从晚到早排序(匹配你示例中的输出顺序) # 如果需要从早到晚排序,改为 ascending=True ohlc_result = ohlc_reversed.sort_index(ascending=False) print(ohlc_result.tail())
方法说明
- 反转序列后,重采样会从原序列的最后一个时间点开始往前划分5分钟区间
label='right'确保每个分组的标签是该区间的结束时间(也就是原序列中该分组的最晚时间)- 最终结果完全匹配你需要的反向分组、以区间结束时间为标签的OHLC格式
备选:自定义分组(更灵活)
如果需要非固定频率的区间划分,可使用自定义分组逻辑:
last_time = df.index[-1] # 生成从最后一个时间点往前推的5分钟间隔标签 group_labels = pd.date_range(end=last_time, periods=int(np.ceil(len(df)/5)), freq='-5T') # 构建区间并为每个时间点分配分组标签 bins = [group_labels.min() - pd.Timedelta(minutes=5)] + sorted(group_labels) df['group'] = pd.cut(df.index, bins=bins, labels=sorted(group_labels), right=True) # 分组计算OHLC并调整顺序 ohlc_result = df.groupby('group')['random'].ohlc().sort_index(ascending=False)
内容的提问来源于stack exchange,提问作者jad
相关产品推荐
相关产品推荐

