首页 > 解决方案 > 计算数据帧所有行之间3d点的成对欧几里得距离

问题描述

我有一个 200000 行的数据框。数据框如下所示:

df = pd.DataFrame([['A-0001',21.8,3.2,6.6,'B-0001',2,8,9],['A-0002',21,3,6,'B-0002',1,8,8],['A-0003',8,9,2,'B-0003',7.64,5.5,12.4]])
df.columns = ['pointA',"A_x","A_y","A_z",'pointB',"B_x","B_y","B_z"] 

那是 :

pointA   A_x     A_y  A_z    pointB   B_x    B_y    B_z 

A-0001   21.8   3.2   6.6    B-0001    2     8      9
A-0002    21     3     6     B-0002    1     8      8
A-0003    8      9     2     B-0002  7.64   5.5    12.4

"A_x","A_y","A_z"是A点坐标,"B_x","B_y","B_z"是B点坐标

我想添加一个新的df列“距离”,df [“距离]是每一行的pointA和point B之间的距离。

最快的方法是什么?

标签: pythonpandas

解决方案


最好以完全矢量化的方式执行此操作:

df["distance"] = np.sqrt((df.A_x - df.B_x)**2
                       + (df.A_y - df.B_y)**2
                       + (df.A_z - df.B_z)**2)

推荐阅读