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

如何基于前后已知出发时间动态插补缺失的出发时间?

时间缺失值的线性插值解决方案

核心逻辑

针对出发时间中以0标记的缺失值,采用以下步骤插补:

  1. 定位每个缺失值区间的上一个有效时间和下一个有效时间
  2. 计算两个有效时间的总秒数差,区间内的间隔数为「缺失值数量 + 1」
  3. 将总时间差平均分配到每个间隔,依次计算并填充缺失位置的时间

代码实现(Python)

首先实现时间与秒数的转换工具函数,方便数值计算:

def time_to_sec(time_str):
    """将HH:MM:SS格式字符串转换为总秒数"""
    h, m, s = map(int, time_str.split(':'))
    return h * 3600 + m * 60 + s

def sec_to_time(seconds):
    """将总秒数转换为HH:MM:SS格式字符串"""
    h = seconds // 3600
    m = (seconds % 3600) // 60
    s = seconds % 60
    return f"{h:02d}:{m:02d}:{s:02d}"

然后实现动态插值的核心函数:

def interpolate_missing_times(times):
    """
    对包含缺失值(标记为"0")的时间列表进行线性插值
    :param times: 时间字符串列表,缺失值用"0"表示
    :return: 填充后的时间列表
    """
    processed = times.copy()
    n = len(processed)
    i = 0
    
    while i < n:
        if processed[i] == "0":
            # 查找上一个有效时间的索引
            prev_idx = i - 1
            while prev_idx >= 0 and processed[prev_idx] == "0":
                prev_idx -= 1
            if prev_idx < 0:
                i += 1
                continue
            
            # 查找下一个有效时间的索引
            next_idx = i + 1
            while next_idx < n and processed[next_idx] == "0":
                next_idx += 1
            if next_idx >= n:
                i += 1
                continue
            
            # 计算时间差与步长
            prev_sec = time_to_sec(processed[prev_idx])
            next_sec = time_to_sec(processed[next_idx])
            total_diff = next_sec - prev_sec
            interval_count = next_idx - prev_idx
            step = total_diff // interval_count
            
            # 填充中间缺失值
            for j in range(prev_idx + 1, next_idx):
                processed[j] = sec_to_time(prev_sec + step * (j - prev_idx))
            
            # 跳转到下一个有效位置,避免重复处理
            i = next_idx
        else:
            i += 1
    return processed

测试示例

针对你提供的案例数据进行测试:

# 对应i=2到i=5的出发时间(i=2:14:41:03,i=3/4:0,i=5:14:44:39)
sample_times = ["14:41:03", "0", "0", "14:44:39"]
filled_times = interpolate_missing_times(sample_times)
print(filled_times)
# 输出结果:['14:41:03', '14:42:15', '14:43:27', '14:44:39']

注意事项

  • 若列表开头或结尾存在连续缺失值,当前代码会保留0,可根据需求修改(例如用第一个/最后一个有效时间填充)
  • 若总时间差无法被间隔数整除,代码采用整数除法取整,若需更精确可保留浮点秒数后再转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:35:00