You need to enable JavaScript to run this app. Python实现考虑闰年的时间序列DataFrame按年份分列转换
优惠活动
大模型
产品
解决方案
定价
更多

Python实现考虑闰年的时间序列DataFrame按年份分列转换

逐小时负荷序列转年度宽表实现方案

适用场景

针对已采集的2013-2020年逐小时系统负荷DataFrame(含date_time、system_load两列,共70128条记录),输出按年内相对采样位置对齐的年度宽表,自动适配闰年/平年的序列长度差,平年缺失位置自动填充NaN。

实现步骤(基于pandas)

代码依赖

  • 确保pandas库已安装
  • 原始DataFrame命名为df

完整可运行代码

import pandas as pd

# 解析日期时间列(若已为datetime类型可跳过)
df['date_time'] = pd.to_datetime(df['date_time'])

# 提取核心映射字段
df['year'] = df['date_time'].dt.year
# 计算当年内的相对小时位置:从当年1月1日0点起累计计数,索引从0开始
df['relative_hour'] = (df['date_time'].dt.dayofyear - 1) * 24 + df['date_time'].dt.hour

# 透视为目标宽表结构
wide_table = df.pivot(
    index='relative_hour',
    columns='year',
    values='system_load'
)

# 按要求重命名列
wide_table.columns = [f'Year{col}' for col in wide_table.columns]

# 重置索引,移除relative_hour索引列
wide_table = wide_table.reset_index(drop=True)

自动适配逻辑

  • 闰年差异适配:relative_hour完全基于自然时间偏移计算,闰年多出的2月29日采样点会自动落在对应累计位置,平年无对应日期,匹配时自动填充NaN,无需手动做长度对齐。
  • 行索引自动对齐:最终宽表总行数为区间内最长年度的采样长度(即闰年的8784行),平年序列因长度不足8784,超出自身有效长度的位置全部填充NaN。
  • 结果校验:生成的宽表共8列(Year2013至Year2020),其中平年列非空值为8760个,闰年(2016、2020)列非空值为8784个,总非空值和原始记录数完全一致。

内容的提问来源于stack exchange,提问作者swhh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 16:54:04