插值有2个已知系列

时间:2016-03-10 13:36:13

标签: python numpy pandas interpolation

我有一个类似的数据框:

Beta  | Z   |  K
2     | 0   | 1.2
2     | 1   | 1.5
2     | 2   | 1.7
3     | 0   | 1.3
3     | 1   | 1.7
3     | 2   | 1.9
4     | 0   | 1.5
4     | 1   | 2.0
4     | 2   | 2.2

我想在K插入Beta = [2.2, 3.4]值(例如)。我该怎么做才能对每个Z值单独进行插值?

1 个答案:

答案 0 :(得分:1)

让我们分两步完成。

首先,解决单个Z值的问题。

betas = [2.2, 3.3]            # those are the values you want to interpolate at
df_0 = df[df['Z'] == 0]       # reduce the dataframe
a = df_0[["Beta", "K"]].transpose().as_matrix()  # convert to numpy array
np.interp(betas, a[0], a[1])  # use numpy.interp

输出:array([ 1.22, 1.36])

第二次,使用groupby将上述解决方案独立应用于每个Z值:

# put it all in a function
def f(df):
    a = df[["Beta", "K"]].transpose().as_matrix()
    return np.interp(betas, a[0], a[1])
df.groupby("Z").apply(f)

输出:

Z
0    [1.22, 1.36]
1    [1.54, 1.79]
2    [1.74, 1.99]