Насколько я понимаю, вам нужна отдельная функция интерполяции, определенная для каждого прогона.Затем вы хотите применить эти функции ко второму фрейму данных.Я определил фрейм данных 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, который выглядит так: