如何依据CYCLE_PART列按条件重采样时间序列?
条件式时间序列重采样实现方法
直接给你分步实现的代码和逻辑,针对你需要按CYCLE_PART列区分采样频率的需求:
1. 先准备带CYCLE_PART的时间序列数据
假设你已经有生成CYCLE_PART的逻辑,这里整合一个完整的示例(包含数据生成和标记列):
import pandas as pd import numpy as np # 生成测试时间序列数据(1分钟频率,覆盖白天和夜间) date_rng = pd.date_range(start='2024-01-01 00:00:00', end='2024-01-02 23:59:00', freq='T') df = pd.DataFrame(date_rng, columns=['timestamp']) df['value'] = np.random.randn(len(date_rng)) # 随机数值列 df = df.set_index('timestamp') # 设置时间索引,重采样必须依赖这个 # 生成CYCLE_PART列:示例逻辑为6:00-18:00标记为DAY,其余为NIGHT df['CYCLE_PART'] = np.where( (df.index.hour >= 6) & (df.index.hour < 18), 'DAY', 'NIGHT' )
2. 按CYCLE_PART分组重采样
核心思路是拆分两组分别处理,再合并结果:
# 拆分DAY和NIGHT数据集 day_df = df[df['CYCLE_PART'] == 'DAY'] night_df = df[df['CYCLE_PART'] == 'NIGHT'] # 分别按对应频率重采样(这里用均值聚合,你可以换成sum、max、first等自己需要的方式) day_resampled = day_df.resample('15T').mean() night_resampled = night_df.resample('30T').mean() # 合并重采样后的结果,按时间索引排序 final_df = pd.concat([day_resampled, night_resampled]).sort_index() # 可选:重新映射CYCLE_PART列(因为重采样后该列会被聚合,需要重新标记) final_df['CYCLE_PART'] = np.where( (final_df.index.hour >= 6) & (final_df.index.hour < 18), 'DAY', 'NIGHT' )
关键注意点
- 必须确保数据集的索引是datetime类型,否则
resample会报错。如果原始数据索引不是时间,先转换:df = df.set_index(pd.to_datetime(df['timestamp'])) - 聚合函数可根据需求灵活替换,比如统计总和用
sum(),取第一个值用first() - 不管你的
CYCLE_PART是按小时划分还是自定义时间段,只要列标记正确,拆分重采样的逻辑完全通用
内容的提问来源于stack exchange,提问作者dspractician
相关产品推荐
相关产品推荐

