【问题标题】:How to pass two dataframe columns to scipy.spatial.distance.pdist如何将两个数据框列传递给 scipy.spatial.distance.pdist
【发布时间】:2021-10-12 11:43:12
【问题描述】:

我有一个数据框,其中包含索引中的位置名称和 2 列纬度和经度。

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() 计算距离矩阵,但为了做到这一点,我首先需要一个带有 (LATITUDE, LONGITUDE) 的新列,以便将其传递给 pdist()。

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

【问题讨论】:

    标签: python pandas dataframe scipy distance


    【解决方案1】:

    使用 list + zip 的旧组合。 zip 创建配对对象,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()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      相关资源
      最近更新 更多