Линейная одномерная интерполяция на нескольких наборах данных с использованием циклов - PullRequest
0 голосов
/ 08 февраля 2019

Я заинтересован в выполнении линейной интерполяции с использованием библиотеки scipy.interpolate.Набор данных выглядит примерно так: DATAFRAME для интерполяции между X, Y для разных RUN

Я хотел бы использовать эту интерполированную функцию, чтобы найти недостающий Y из этого набора данных: DATAFRAME для использования функции интерполяции

Число приведенных здесь прогонов всего 3, но я работаю с набором данных, который будет работать с тысячами прогонов.Следовательно, оцените, если вы могли бы посоветовать, как использовать итерационные функции для интерполяции?

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

1 Ответ

0 голосов
/ 08 февраля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...