У меня большой массив данных со многими столбцами. Для простоты скажем:
df_sample = pd.DataFrame({'a':np.arange(10)})
Мне нужно определить новый столбец в df_sample (скажем, столбец 'b'), который должен использовать некоторую интерполяционную функцию, аргумент которой должен быть взят из столбца 'a'.
Теперь проблема в том, что функция интерполяции различна для каждой строки. Для каждой строки я интерполирую из другой 1D сетки; поэтому у меня есть разные функции интерполяции для каждой строки. Итак, я заранее сгенерировал эти функции интерполяции и сохранил их в массив. Просто для примера, приведенного ниже кода для генерации образца массива "list_interpfns"
list_interpfns = np.array([None]*10)
for j in range(10):
list_interpfns[j] = scipy.interpolate.interp1d(np.linspace(0,10*(j+1),10),np.linspace(0,50,10))
Чтобы сгенерировать df_sample.b [j], мне нужно использовать list_interpfns [j] с аргументом df_sample.a [j]. Поскольку я не могу напрямую применить формулу столбца для этой цели, я поместил это в цикл.
df_sample['b'] = 0
for j in range(10):
df_sample.loc[j,'b'] = list_interpfns[j](df_sample.a[j])
Проблема в том, что эта операция занимает много времени. В этом небольшом примере вычисления могут показаться быстрыми. Но моя настоящая программа намного больше, и когда я сравнивал время, затрачиваемое на все операции, эта конкретная последовательность операций занимала 84% от общего времени; и мне нужно ускорить это.
Если есть какой-то способ избежать цикла for (например, использовать df.apply или что-то в этом роде), то я считаю, что это может сократить время работы. Не могли бы вы дать возможные альтернативы?