Когда проблема становится большой, вы можете попробовать использовать pandas eval.Убедитесь, что вы установили Numberxpr для коэффициентов усиления (pip install numexpr
), смотрите readme Numberxpr здесь , чтобы увидеть, как это работает.Если установлено, Pandas просто оборачивает эту функциональность в метод .eval
.
import pandas
df = pandas.DataFrame( random.random((5000000,2)), columns=('vx', 'vy'))
df.eval("vmag = sqrt(vx**2 + vy**2)", engine='numexpr', inplace=True)
Я думаю, что это ваша лучшая ставка, Numberxpr использует многопоточность
In [24]: %timeit np.linalg.norm( df[["vx", "vy"]], axis=1)
1 loop, best of 3: 266 ms per loop
In [25]: %timeit df.eval("sqrt(vx**2 + vy**2)", engine='python')
10 loops, best of 3: 144 ms per loop
In [26]: %timeit df.eval("sqrt(vx**2 + vy**2)", engine='numexpr')
10 loops, best of 3: 42 ms per loop
Также см. этот документ для повышения производительности.