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

基于年度常量数据补全小时级数据

这种批量填充年度值到小时级时间序列的需求太常见了,用嵌套if/switch确实会越写越崩溃,给你两个实用的高效方案,看你用哪种工具更顺手:

方案一:用Python Pandas处理

Pandas是处理这类时间序列数据的绝佳工具,完全不需要手动写年份判断逻辑,核心思路是生成时间序列后,通过年份关联自动匹配数值:

import pandas as pd

# 1. 读取或创建输入年度数据
input_df = pd.DataFrame({
    'Year': [2018, 2019, 2020],
    'Value': [100, 200, 300]
})

# 2. 生成覆盖目标年份的小时级时间序列
# 按需调整起始/结束时间即可支持任意年份范围
start_dt = '2018-01-01 00:00:00'
end_dt = '2020-12-31 23:00:00'
hourly_times = pd.date_range(start=start_dt, end=end_dt, freq='H')
output_df = pd.DataFrame({'Datetime': hourly_times})

# 3. 提取时间戳的年份,关联输入表的对应数值
output_df['Year'] = output_df['Datetime'].dt.year
output_df = output_df.merge(input_df, on='Year', how='left').drop('Year', axis=1)

# 4. 导出结果(可选)
# output_df.to_csv('hourly_output.csv', index=False)
print(output_df.head())

这个方法的优势是:不管你要处理30年还是更久的数据,只要调整start_dt和end_dt就行,完全不用修改匹配逻辑,而且Pandas的合并操作比手动判断高效N倍,大数据量下优势更明显。

方案二:用SQL处理(以MySQL 8.0+为例)

如果你的数据本身就在数据库里,用递归CTE生成时间序列,再通过年份关联即可,不用写一堆CASE WHEN:

-- 递归生成小时级时间序列
WITH RECURSIVE hourly_datetimes AS (
    SELECT '2018-01-01 00:00:00' AS datetime_col
    UNION ALL
    SELECT DATE_ADD(datetime_col, INTERVAL 1 HOUR)
    FROM hourly_datetimes
    WHERE datetime_col < '2020-12-31 23:00:00'
)
-- 关联年度表获取对应数值
SELECT 
    hd.datetime_col AS Datetime,
    yv.Value
FROM hourly_datetimes hd
LEFT JOIN yearly_values yv
ON YEAR(hd.datetime_col) = yv.Year
ORDER BY hd.datetime_col;

如果是PostgreSQL等其他数据库,递归CTE的逻辑类似,只是生成时间的语法略有差异(比如用datetime_col + INTERVAL '1 hour'),核心都是通过YEAR()函数提取年份做关联,彻底告别手动判断每个年份的繁琐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:05:24