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

无date_time字段时如何从非等间隔数据推断逐小时时间序列

问题解答

你需要从离散不等间隔的试验观测点得到逐小时对应的数值,本质是一维插值问题,不建议直接使用全局线性回归,首选分段线性插值,具体说明如下:

方案选型说明

  • 不推荐全局线性回归的原因:从你给出的样例数据就能看出,不同阶段Value随时间的变化速率差异很大:2.56小时到4.43小时之间每小时Value约增长0.075,4.43小时到10.12小时之间每小时Value约增长0.346。全局线性回归会强制给整个试验周期拟合一个固定斜率的直线,完全忽略局部变化规律,结果误差会非常大。只有当你通过试验机理确认Value和时间全程呈严格线性关系时,才适合用全局线性回归。
  • 首选分段线性插值:这是这类无特殊业务规则的试验数据最通用的处理方案,逻辑是默认相邻两个观测点之间Value随时间线性变化,没有额外的模型假设,可解释性强、计算简单,结果完全满足逐小时取值的需求。
  • 备选三次样条插值:如果你观测的指标是温度、浓度这类不会发生突变的连续平滑量,可以换用三次样条插值,得到的逐小时数值过渡会更自然,不会出现折线拐点。

具体实现方式

直接用pandas内置的插值接口即可完成,不需要额外复杂建模,代码如下:

import pandas as pd
import numpy as np

# 原始观测数据
df = pd.DataFrame({
    'Value': [0.32, 0.46, 2.43],
    'Interval': [2.56, 4.43, 10.12]
})

# 生成需要输出的逐小时时间点(从0小时到试验结束的最大小时数)
max_hour = int(np.ceil(df['Interval'].max()))
hourly_ticks = pd.Index(np.arange(0, max_hour + 1), name='Interval')

# 合并原始观测点和逐小时目标点,按时间排序
df_interp = df.set_index('Interval').reindex(hourly_ticks.union(df['Interval'])).sort_index()

# 执行插值,要换三次样条可以把method改为'spline', order=3
df_interp['Value'] = df_interp['Value'].interpolate(method='linear')

# 筛选得到逐小时对应的结果
hourly_result = df_interp.loc[hourly_ticks].reset_index()

注意事项

你目前的原始数据缺少试验初始时刻(0小时)的观测值,小于2.56小时的0、1、2小时位置没有左边界观测点支撑,直接插值的结果误差会很大,建议补充0小时的初始Value后再计算,结果会更可靠。

以你给出的样例数据做线性插值,几个关键节点的参考结果如下:

Interval(试验开始后小时数)插值得到的Value
3≈0.35
4≈0.43
5≈0.66
10≈2.38

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:33:19