如何从将在列和行之间插值的 Python 表中获取值



我在Pandas中创建了表(数据帧)。它是 2D 表,整数作为列索引,整数作为行索引(它是 position xposition y )。我知道如何使用索引获取该表"单元格"中的值,但我想从线性插值的"列和行之间"获取值。

最好,我想对保存在两个表中的大量 x,y 执行此操作 Position_x(m x n)Position_y(m x n)并将结果放入表 Results(m x n)

https://i.stack.imgur.com/utv03.png

以下是Excel中此类过程的示例:https://superuser.com/questions/625154/what-is-the-simplest-way-to-interpolate-and-lookup-in-an-x-y-table-in-excel

谢谢西蒙

我发现了一些在 90% 中工作的东西,但是,它有两个缺点:1)索引和列需要严格增加,2) 对于一组 n 个输入对,它绘制 n x n 个结果数组,而不仅仅是 n 个结果(例如,下面对于 3 对输入点,我只需要 3 个结果值,使用该代码我将得到 9 个值作为输入点的所有组合)。

这是我的发现:

import scipy
import scipy.interpolate
import numpy as np
import pandas as pd
x=np.array([0,10,25,60,100])       #Index
y=np.array([1000,1200,1400,1600])  #Column
data=np.array([[60,54,33,0],
              [50,46,10,0],
              [42,32,5,0],
              [30,30,2,0],
              [10,10,0,0]])
Table_to_Interpolate=pd.DataFrame(data,index=x,columns=y)
sp=scipy.interpolate.RectBivariateSpline(x,y,data, kx=1, ky=1, s=0)
scipy.interpolate.RectBivariateSpline(x,y,data, kx=1, ky=1, s=0)
Input_Xs=12, 44, 69
Input_Ys=1150, 1326, 1416
Results=pd.DataFrame(sp(Input_Xs, Input_Ys), index=Input_Xs, columns=Input_Ys,)

它并不完美,但这是我能找到的最好的。

如果我理解你的问题:

首先,您可以使用 pandas.melt 将多列结果表转换为单列结果表。

然后,您可以使用 ben-t 伟大的答案进行插值。

希望我有帮助。

最新更新