Как улучшить производительность кода python?
for i in range(len(PI)-1):
if PI.loc[i, TR] == PI.loc[i+1, TR]:
PI.loc[i, 'DX'] = PI.loc[i+1, X] - PI.loc[i, X]
PI.loc[i, 'DY'] = PI.loc[i+1, Y] - PI.loc[i, Y]
PI.loc[i, 'DZ'] = PI.loc[i+1, Z] - PI.loc[i, Z]
PI['PL'] = np.sqrt(pow(PI.DX, 2) + pow(PI.DY, 2) + pow(PI.DZ, 2))
Вот пример входных данных данных
TR,X,Y,Z
K-11,367019.7,867162.3,505.2
K-11,367019.2,867142.7,509.5
K-11,367018.6,867137.7,510.0
K-14,367313.4,867301.7,594.3
K-14,367312.2,867224.5,605.1
K-14,367312.7,867213.9,604.6
K-15,367166.1,867197.1,557.6
K-15,367165.6,867187.1,558.6
K-15,367165.9,867148.2,562.9
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
Воспользуйтесь функционалом pandas:
Ваш df:
TR X Y Z
0 K-11 367019.7 867162.3 505.2
1 K-11 367019.2 867142.7 509.5
2 K-11 367018.6 867137.7 510.0
3 K-14 367313.4 867301.7 594.3
4 K-14 367312.2 867224.5 605.1
5 K-14 367312.7 867213.9 604.6
6 K-15 367166.1 867197.1 557.6
7 K-15 367165.6 867187.1 558.6
8 K-15 367165.9 867148.2 562.9
ну и далее:
import pandas as pd
import numpy as np
df["PL"] = df["TR"].eq(df["TR"].shift().bfill()).astype(int)
df["PL"] = np.where(df["PL"]==1, np.sqrt(pow(df["X"].diff().shift(-1), 2) +
pow(df["Y"].diff().shift(-1), 2) +
pow(df["Z"].diff().shift(-1), 2)),
np.nan)
Получаем df:
TR X Y Z PL
0 K-11 367019.7 867162.3 505.2 20.072369
1 K-11 367019.2 867142.7 509.5 5.060632
2 K-11 367018.6 867137.7 510.0 347.720477
3 K-14 367313.4 867301.7 594.3 NaN
4 K-14 367312.2 867224.5 605.1 10.623559
5 K-14 367312.7 867213.9 604.6 154.863811
6 K-15 367166.1 867197.1 557.6 NaN
7 K-15 367165.6 867187.1 558.6 39.138089
8 K-15 367165.9 867148.2 562.9 NaN
Результат, конечно, лучше перепроверить, потому как у меня не было на это времени.