Я хочу рассчитать расстояние между текущей и следующей конечной точкой в данных ниже. Один ключ может иметь несколько конечных точек (x, y).
Я ищу более быстрое решение вышеупомянутой проблемы, чем то, что у меня есть, поскольку на его выполнение уходит много часов.
Данные
Key x y
1 87.4375 28.921875
1 97.4375 23.921875
1 97.4375 23.921875
1 97.4375 23.921875
1 97.4375 23.921875
2 86.4375 24.921875
2 85.4375 24.921875
2 93.4375 29.921875
2 86.4375 24.921875
2 85.4375 24.921875
2 93.4375 29.921875
Что я пробовал:
Решение 1
new_df= pd.DataFrame(columns=['key', 'distance'])
for key in orig_df.key.values:
x2 = orig_df.loc[orig_df.key== key ,'x'].shift(-1)
y2 = orig_df.loc[orig_df.key== key ,'y'].shift(-1)
x1 = orig_df.loc[orig_df.key== key ,'x']
y1 = orig_df.loc[orig_df.key== key ,'y']
distance = cal_distance(x2,y2,x1,y1)
new_df.append({'key': key, 'distance': distance}, ignore_index=True)
def cal_distance(x2,y2,x1,y1):
return abs(np.sqrt( np.square(x2 - x1) + np.square(y2 - y1))).sum()
Здесь много строк, и выполнение приведенного выше кода занимает несколько часов.
Решение 2 (не сработало)
orig_df.groupby('key').pipe(cal_distance(orig_df.x.shift(-1),orig_df.y.shift(-1),orig_df.x,orig_df.y))
Я пробовал сгруппировать по ключу.
Любая помощь очень ценится.
Ожидаемый результат
key distance
0 1 11.18034
1 2 29.470288
to_dict()
. А пока несколько общих советов: не используйте.values
. Не используйте явные циклы. Не добавляйте в DataFrame. Неудивительно, что на это уходит часы. - person AMC   schedule 10.12.2019Key =2
есть три балла. Для какой из этих 3 точек вы хотите рассчитать расстояние? - person shaik moeed   schedule 10.12.2019