Я хочу применить функцию к каждому столбцу DataFrame.
К каким строкам применить это значение зависит от некоторого условия, специфичного для столбца.
Значения параметров, которые необходимо использовать, также зависят от функции.
Возьмем этот очень простой DataFrame:
>>> df = pd.DataFrame(data=np.arange(15).reshape(5, 3))
>>> df
0 1 2
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
4 12 13 14
Я хочу применить функцию к каждому столбцу, используя специфичные для столбца значения, содержащиеся в массиве, скажем:
>>> multiplier = np.array([0, 100, 1000]) # First column multiplied by 0, second by 100...
Я также хочу только умножить строки, чьи индексы находятся в пределах определенного столбца диапазона, скажем ниже значений, содержащихся в массиве:
>>> limiter = np.array([2, 3, 4]) # Only first two elements in first column get multiplied, first three in second column...
Что работает так:
>>> for i in range(limit.shape[0]):
>>> df.loc[df.index<limit[i], i] = multiplier[i] * df.loc[:, i]
>>> df
0 1 2
0 0 100 2000
1 0 400 5000
2 6 700 8000
3 9 10 11000
4 12 13 14
Но этот подход слишком медленный для больших DataFrames, с которыми я имею дело.
Есть ли способ векторизовать это?