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

Pandas是否有标准函数可在查找表中进行值插值查询?

解决DataFrame查找表的双轴插值查询问题

你需要的是对行、列均为离散索引的DataFrame进行双线性插值查询,也就是在两个维度的索引间隙中计算中间值。Pandas本身没有直接的lookup类函数支持这种跨维度的插值查询,但可以通过以下几种高效方式实现:

方法一:用scipy.interpolate.interp2d实现双线性插值

这是最直接的插值方案,适合需要精确插值结果的场景:

import pandas as pd
from scipy.interpolate import interp2d

# 定义原始查找表
d = {-7: [3.6,2.6,2.25,2], 
     0: [4.3,2.8,2.5,2.2], 
     5: [4.8,3.1,2.7,2.4],
     10: [5.5,3.5,3,2.6],
     15: [6.5,4,3.4,2.8]}
table = pd.DataFrame(data=d, index=[35,55,65,75])

# 提取行、列索引和表格数据
x = table.columns.values  # 列索引:[-7,0,5,10,15]
y = table.index.values    # 行索引:[35,55,65,75]
z = table.values          # 表格数值

# 创建双线性插值函数
interp_func = interp2d(x, y, z, kind='linear')

# 查询(-2, 38)对应的插值结果
result = interp_func(-2, 38)
print(result)  # 输出:[[4.02]]

方法二:用Pandas原生reindex+插值(分步单轴处理)

如果不想依赖Scipy,可以用Pandas自身的插值能力,先对列插值,再对行插值:

# 第一步:对列插值,生成包含目标列-2的临时表
col_interp = table.reindex(table.columns.union([-2]), axis=1).interpolate(method='linear', axis=1)

# 第二步:对行插值,查询目标行38的值
row_interp = col_interp.reindex(col_interp.index.union([38]), axis=0).interpolate(method='linear', axis=0)

# 获取最终结果
result = row_interp.loc[38, -2]
print(result)  # 输出:4.02

补充说明

  • 两种方法都能得到相同的双线性插值结果4.02,对应你要查询的(-2,38)坐标。
  • 若查找表是规则网格(行、列索引均单调有序),两种方法都适用;如果是非规则网格,interp2d的兼容性更好。
  • 批量查询多个坐标时,interp_func可直接接收数组参数,效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:45:32