如何将两个dataframe列传递给scipy.spatial.distance.pdist

2024-10-17 06:29:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,在索引中有一个位置的名称,有两列,纬度和经度

data = {'LE0039': {'LATITUDE': 59.522583, 'LONGITUDE': 29.566056},
        'LE0073': {'LATITUDE': 59.287991, 'LONGITUDE': 31.369472},
        'LE0142': {'LATITUDE': 59.350241, 'LONGITUDE': 32.531339},
        'LE0278': {'LATITUDE': 59.96475, 'LONGITUDE': 29.19585}}
df = pd.DataFrame.from_dict(data, 'index')

         LATITUDE  LONGITUDE
LE0039  59.522583  29.566056
LE0073  59.287991  31.369472
LE0142  59.350241  32.531339
LE0278  59.964750  29.195850

我需要计算从一个站点到任何其他站点的最小距离,并将其存储在每个站点的第三列中。我想用scipy.spatial.distance.pdist()计算距离矩阵,但为了计算,我首先需要一个带有(纬度、经度)的新列,以便将其传递给pdist()

所以我有两个问题。一个是如何将lat和long组合成一个数组(lat,long),另一个是如果您认为有更好的方法来计算最小距离


Tags: 数据距离data站点longlatlatitude纬度
1条回答
网友
1楼 · 发布于 2024-10-17 06:29:16

使用好的旧组合list+zipzip创建配对对象,list创建列表,以便将其分配给数据帧

df['combined'] = list(zip(df.LATITUDE, df.LONGITUDE))

输出:

LE0039  59.522583   29.566056   (59.522583, 29.566056)
LE0073  59.287991   31.369472   (59.287991000000005, 31.369472)
LE0142  59.350241   32.531339   (59.350241000000004, 32.531339)
LE0278  59.964750   29.195850   (59.96475, 29.19585)

旁注:我对十进制展开很感兴趣,不知道为什么会有000005

关于距离,numpyscipy应该有太多的选择,比我所熟悉的要多,所以在谷歌上快速搜索后,你应该会找到很多好的选择:)我通常坚持使用pdist()

相关问题 更多 >