gpt4 book ai didi

python - 在 Pandas 数据框中查找从点到行的欧几里德距离

转载 作者:行者123 更新时间:2023-12-03 20:23:35 25 4
gpt4 key购买 nike

我有一个数据框

id    lat      long
1 12.654 15.50
2 14.364 25.51
3 17.636 32.53
5 12.334 25.84
9 32.224 15.74

我想从列表 L1 中保存的特定位置找到这些坐标的欧几里德距离
L1 = [11.344,7.234]

我想在 df 中创建一个新列,其中我有距离
id     lat     long    distance
1 12.654 15.50
2 14.364 25.51
3 17.636 32.53
5 12.334 25.84
9 32.224 15.74

我知道使用 math.hypot() 找到两点之间的欧几里得距离:
dist = math.hypot(x2 - x1, y2 - y1)

我如何使用应用或迭代行来编写函数以给出距离。

最佳答案

使用矢量化方法

In [5463]: (df[['lat', 'long']] - np.array(L1)).pow(2).sum(1).pow(0.5)
Out[5463]:
0 8.369161
1 18.523838
2 26.066777
3 18.632320
4 22.546096
dtype: float64

这也可以
In [5468]: df['distance'] = df[['lat', 'long']].sub(np.array(L1)).pow(2).sum(1).pow(0.5)

In [5469]: df
Out[5469]:
id lat long distance
0 1 12.654 15.50 8.369161
1 2 14.364 25.51 18.523838
2 3 17.636 32.53 26.066777
3 5 12.334 25.84 18.632320
4 9 32.224 15.74 22.546096

选项 2 使用 Numpy 的内置 np.linalg.norm向量范数。
In [5473]: np.linalg.norm(df[['lat', 'long']].sub(np.array(L1)), axis=1)
Out[5473]: array([ 8.36916101, 18.52383805, 26.06677732, 18.63231966, 22.5460958 ])

In [5485]: df['distance'] = np.linalg.norm(df[['lat', 'long']].sub(np.array(L1)), axis=1)

关于python - 在 Pandas 数据框中查找从点到行的欧几里德距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46908388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com