繁体   English   中英

Python中的多列插值

[英]Multi-column interpolation in Python

我想使用scipypandas在这样的表上进行插值:

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。

该过程将是:

  1. 从第一个插值参数 ( x ) 开始,找到目标值周围的值。 在这种情况下,目标值为 1.5,周围值为 1 和 2。
  2. 考虑到x=1 ,在y中插值 2.5 的目标。 在这种情况下,在第 1 行和第 2 行之间,获得 25
  3. 考虑到x=2 ,在y中插值 2.5 的目标。 在这种情况下,在第 4 行和第 5 行之间,获得 55
  4. 将先前步骤中的值插值到目标x值。 在这种情况下, 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 为xyz创建一个插值 function z = f(x, y) 第二行使用这个 function 对z给定的xy值进行插值。 默认是线性插值。

定义你的插值 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM