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

如何在Pandas DataFrame中实现线性插值查找?

Pandas原生实现线性插值获取中间值

问题背景

我用Pandas创建了如下DataFrame:

d = {'X': [1, 2, 3], 'Y': [220, 187, 170]}
df = pd.DataFrame(data=d)

对应的DataFrame内容:

XY
1220
2187
3170

通过df[df['X'] == 1.0]['Y']可以获取X=1.0对应的Y值(返回220),但想知道有没有Pandas原生方法,能计算X处于现有值之间时的Y线性插值结果,比如X=1.5时得到203.5。试过interpolate但会修改原DataFrame,也能自己写函数,但想找原生实现方案。


解决方案

方法1:重新索引+插值(不修改原DataFrame)

通过构造包含目标X值的新索引,重新索引后执行插值,完全不改动原数据:

target_x = 1.5
# 整合原X值和目标插值X值并排序
new_x_list = sorted(df['X'].tolist() + [target_x])
# 设X为索引→重新索引→线性插值
interpolated_result = df.set_index('X').reindex(new_x_list).interpolate(method='linear')
# 提取目标X对应的Y值
y_value = interpolated_result.loc[target_x, 'Y']
print(y_value)  # 输出:203.5

方法2:临时添加行+插值(原DataFrame无变化)

临时把目标X值加入DataFrame,插值后取出结果再丢弃临时数据:

import pandas as pd
target_x = 1.5
# 拼接临时行并按X排序
temp_df = pd.concat([df, pd.DataFrame({'X': [target_x], 'Y': [pd.NA]})]).sort_values('X')
# 对Y列做线性插值
temp_df['Y'] = temp_df['Y'].interpolate(method='linear')
# 获取目标结果
y_value = temp_df[temp_df['X'] == target_x]['Y'].iloc[0]
print(y_value)  # 输出:203.5

补充:结合numpy.interp高效计算

虽然不是纯Pandas原生,但numpy.interp可以直接配合Pandas数据使用,代码简洁高效,且无需修改原DataFrame:

import numpy as np
target_x = 1.5
y_value = np.interp(target_x, df['X'], df['Y'])
print(y_value)  # 输出:203.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:47:14