我对使用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)
答案 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)