Ускорение Панды применить функцию

Для относительно большого Pandas DataFrame (несколько строк по 100 тыс.) Я хотел бы создать серию, являющуюся результатом применения функции. Проблема в том, что функция не очень быстрая, и я надеялся, что ее можно как-то ускорить.

df = pd.DataFrame({
 'value-1': [1, 2, 3, 4, 5],
 'value-2': [0.1, 0.2, 0.3, 0.4, 0.5],
 'value-3': somenumbers...,
 'value-4': more numbers...,
 'choice-index': [1, 1, np.nan, 2, 1]
})

def func(row):
  i = row['choice-index']
  return np.nan if math.isnan(i) else row['value-%d' % i]

df['value'] = df.apply(func, axis=1, reduce=True)

# expected value = [1, 2, np.nan, 0.4, 5]

Любые предложения приветствуются.

Обновить

Очень маленькое ускорение (~ 1.1) может быть достигнуто путем предварительного кэширования выбранных столбцов.func изменится на:

cached_columns = [None, 'value-1', 'value-2', 'value-3', 'value-4']
def func(row):
  i = row['choice-index']
  return np.nan if math.isnan(i) else row[cached_columns[i]]

Но я надеялся на большее ускорение ...

Ответы на вопрос(1)

Ваш ответ на вопрос