我有一个类似的数据框:
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
值单独进行插值?
答案 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]