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

如何在Excel中实现类Pandas的简便线性插值操作

使用场景

我需要在Excel中管理远期曲线(价格时间序列):对存在可用报价的日期填入对应数值,其余所有日期的数值通过前后相邻已知值做线性插值填充。需求支持动态调整:当市场出现新报价时可新增为枢轴点;当报价过时失效时可删除对应值,单元格自动还原为插值结果。

参考示例

在Pandas中,仅需调用interpolate()方法即可轻松实现该功能,示例代码如下:

import pandas as pd
from numpy import nan

df = pd.DataFrame(data = nan,
                  columns=["some_data"], 
                  index=pd.date_range("20220101", periods=10))


df.loc['2022-01-01', 'some_data'] = 10
df.loc['2022-01-10', 'some_data'] = 100
print(df)
df.interpolate(method='linear', inplace=True)
print(df)
df.some_data.plot()

# 新增2个曲线枢轴点
df.some_data = nan
df.loc['2022-01-01', 'some_data'] = 10
df.loc['2022-01-04', 'some_data'] = 25
df.loc['2022-01-08', 'some_data'] = 110
df.loc['2022-01-10', 'some_data'] = 100
print(df)
df.interpolate(method='linear', inplace=True)
print(df)
df.some_data.plot()

新增2个枢轴点后,DataFrame的数值更新结果如下:

初始状态  第一次插值  新增2个枢轴点  第二次插值
1/1/2022    10        10       10          10
1/2/2022    NaN       20       NaN         15
1/3/2022    NaN       30       NaN         20
1/4/2022    NaN       40       25          25
1/5/2022    NaN       50       NaN         46.25
1/6/2022    NaN       60       NaN         67.5
1/7/2022    NaN       70       NaN         88.75
1/8/2022    NaN       80       110         110
1/9/2022    NaN       90       NaN         105
1/10/2022   100       100      100         100

添加枢轴点前后的曲线对比

约束与诉求

方案需满足以下前提:

  • 避免使用单元格公式,此类方案在生产环境中易引发故障
  • FORECAST函数仅支持全局回归计算,无法满足分段线性插值需求
  • 尽量避免采用VBA自定义函数的开发方案

请问Excel中是否存在和Pandas操作同样简便的线性插值实现方案?

实现方案

满足全部约束要求、操作便捷度和Pandas interpolate()接近的方案是使用Excel内置的Power Query(获取和转换)功能,全程无需编写单元格公式、无需开发VBA自定义函数,插值逻辑为严格分段线性,不存在全局回归的偏差。

操作流程

  1. 整理基础输入区
    新建两列表格:第一列为连续的完整日期序列,第二列命名为「报价」,仅在有确定市场报价的日期填入数值作为枢轴点,其余日期留空。选中两列按Ctrl+T转换为超级表,将表命名为CurveSource。
  2. 加载数据到Power Query
    选中超级表,点击顶部菜单栏「数据」选项卡-「从表格/区域」,确认弹出的导入框中勾选「我的表格有标题」,进入Power Query编辑器。
  3. 配置线性插值逻辑
    在编辑器中按以下步骤操作,所有操作均为可视化点选,无需手写复杂代码:
    • 选中日期列,将数据类型修改为「日期」,按日期做升序排序,确保时间序列顺序正确
    • 给表格添加从0开始的连续索引列
    • 针对报价列的空值,通过内置的填充逻辑配合索引定位,拿到每个空值前后相邻的两个枢轴点的日期、报价数值
    • 新增自定义列,按两点线性公式计算当前日期的插值结果:前点报价 + (后点报价-前点报价) * (当前日期-前点日期)/(后点日期-前点日期),非空的枢轴点直接保留原有报价
    • 清理过程中生成的多余辅助列,仅保留日期、最终插值结果两列
  4. 输出结果
    点击编辑器左上角「关闭并上载」,将计算完成的全量远期曲线结果加载到新工作表中,输出内容全为静态数值,不存在任何单元格公式。

日常维护

后续更新枢轴点时,仅需在CurveSource超级表中录入新的报价、或删除失效的旧报价,右键点击结果表选择「刷新」,全表会自动按最新的枢轴点重新完成线性插值,操作逻辑和Pandas中修改源数据后重新调用interpolate()完全一致。

该方案的核心优势:

  • 输出结果全为静态值,不会出现公式被误改、引用错位的生产故障
  • 插值逻辑和Pandas线性插值完全一致,严格按相邻枢轴点分段计算,适配远期曲线的业务要求
  • 第一次配置完成后无额外开发成本,单次数千行级别的数据刷新耗时不超过1秒,稳定性远高于公式或VBA方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:06:19