[英]Multi-column interpolation in Python
我想使用scipy
或pandas
在这样的表上进行插值:
df = pd.DataFrame({'x':[1,1,1,2,2,2],'y':[1,2,3,1,2,3],'z':[10,20,30,40,50,60] })
df =
x y z
0 1 1 10
1 1 2 20
2 1 3 30
3 2 1 40
4 2 2 50
5 2 3 60
我希望能够对 1.5 的x
值和 2.5 的y
值进行插值并获得 40。
该过程将是:
x
) 开始,找到目标值周围的值。 在这种情况下,目标值为 1.5,周围值为 1 和 2。x=1
,在y
中插值 2.5 的目标。 在这种情况下,在第 1 行和第 2 行之间,获得 25x=2
,在y
中插值 2.5 的目标。 在这种情况下,在第 4 行和第 5 行之间,获得 55x
值。 在这种情况下, x=1
x=2
。 1.5 的插值是 40执行插值的顺序是固定的,数据将被正确排序。
我发现了这个问题,但我想知道这些库中是否已有可用的标准解决方案。
您可以使用scipy.interpolate.interp2d
:
import scipy.interpolate
f = scipy.interpolate.interp2d(df.x, df.y, df.z)
f([1.5], [2.5])
[40.]
第一行使用三个 arrays 为x
、 y
和z
创建一个插值 function z = f(x, y)
。 第二行使用这个 function 对z
给定的x
和y
值进行插值。 默认是线性插值。
定义你的插值 function:
def interpolate(x, y, df):
cond = df.x.between(int(x), int(x) + 1) & df.y.between(int(y), int(y) + 1)
return df.loc[cond].z.mean()
interpolate(1.5,2.5,df)
40.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.