You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何依据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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:01:17