【发布时间】:2021-03-11 00:31:19
【问题描述】:
我有一个如下的数据框:
uuid x_1 y_1 x_2 y_2
0 di-ab5 82.31 184.20 148.06 142.54
1 di-de6 92.35 185.21 24.12 16.45
2 di-gh7 123.45 0.01 NaN NaN
...
我正在尝试在新列中计算[x_1, y_1] 和[x_2, y_2] 之间的欧几里得距离(在此示例中不是实际值)。
uuid dist
0 di-ab5 12.31
1 di-de6 62.35
2 di-gh7 NaN
注意事项:
- 某些行在某些数据点上有
NaN - 可以将原始数据框中的数据表示为点(即
[1.23, 4.56]),而不是拆分 x 和 y 坐标
我目前正在使用以下脚本:
df['dist'] = np.sqrt((df['x_1'] - df['x_2'])**2 + (df['y_1'] - df['y_2'])**2)
但它看起来很冗长并且经常失败。 有没有更好的方法来使用 pandas、numpy 或 scipy?
【问题讨论】:
-
你总是可以写一个函数来隐藏单调。
getdist(df, '1', '2') -
对,更大的问题不是循环,而是计算,有没有可以使用的pandas、numpy或scipy函数?
-
好吧,用 Google 的 30 秒把我带到了 numpy.linalg.norm。
-
((df['x_1'] - df['x_2'])**2 + (df['y_1'] - df['y_2'])**2)**0.5?