使用循环对多个数据集进行线性一维插值

时间:2019-02-08 14:07:04

标签: pandas python-2.7 scipy linear-interpolation

我对使用scipy.interpolate库执行线性插值感兴趣。数据集看起来像这样: DATAFRAME for interpolation between X, Y for different RUNs

我想使用此插值函数从此数据集中查找缺失的Y: DATAFRAME to use the interpolation function

此处给出的运行次数仅为3,但我正在运行的数据集将运行1000次。因此,如果您能建议如何对插值使用迭代函数,请多加赞赏。

from scipy.interpolate import interp1d
for RUNNumber in range(TotalRuns)
 InterpolatedFunction[RUNNumber]=interp1d(X, Y)

1 个答案:

答案 0 :(得分:1)

据我了解,您需要为每次运行定义一个单独的插值函数。然后,您要将这些功能应用于第二个数据框。我用列df定义了一个数据帧['X', 'Y', 'RUN'],并用列new_df定义了另一个数据帧['X', 'Y_interpolation', 'RUN']

interpolating_functions = dict()
for run_number in range(1, max_runs):
    run_data = df[df['RUN']==run_number][['X', 'Y']]
    interpolating_functions[run_number] = interp1d(run_data['X'], run_data['Y'])

现在,我们为每次运行提供了插值函数,我们可以使用它们在新数据框中填充“ Y_interpolation”列。这可以使用apply函数来完成,该函数采用一个函数并将其应用于数据帧中的每一行。因此,让我们定义一个插值函数,该函数将使用此新df的一行,并使用X值和运行编号来计算插值的Y值。

def interpolate(row):
    int_func = interpolating_functions[row['RUN']]
    interp_y = int_func._call_linear([row['X'])[0] #the _call_linear method
                                                   #expects and returns an array
    return interp_y[0]

现在,我们只使用apply和定义的interpolate函数。

new_df['Y_interpolation'] = new_df.apply(interpolate,axis=1)

我正在使用pandas版本0.20.3,这给了我一个new_df,如下所示: interpolation results