使用 pandas 的欧几里得距离矩阵 [英] Euclidean Distance Matrix Using Pandas

查看:121
本文介绍了使用 pandas 的欧几里得距离矩阵的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个.csv文件,其中包含以下格式的城市,纬度和经度数据:

I have a .csv file that contains city, latitude and longitude data in the below format:

CITY|LATITUDE|LONGITUDE
A|40.745392|-73.978364
B|42.562786|-114.460503
C|37.227928|-77.401924
D|41.245708|-75.881241
E|41.308273|-72.927887

我需要以以下格式创建距离矩阵(请忽略虚拟值):

I need to create a distance matrix in the below format (please ignore the dummy values):

         A         B         C         D         E   
A  0.000000  6.000000  5.744563  6.082763  5.656854  
B  6.000000  0.000000  6.082763  5.385165  5.477226  
C  1.744563  6.082763  0.000000  6.000000  5.385165
D  6.082763  5.385165  6.000000  0.000000  5.385165  
E  5.656854  5.477226  5.385165  5.385165  0.000000  

我已将数据加载到pandas数据框中,并创建了如下所示的交叉联接:

I have loaded the data into a pandas dataframe and have created a cross join as below:

import pandas as pd
df_A = pd.read_csv('lat_lon.csv', delimiter='|', encoding="utf-8-sig")
df_B = df_A
df_A['key'] = 1
df_B['key'] = 1 
df_C = pd.merge(df_A, df_B, on='key')  




  • 可以吗请帮助我创建上述矩阵结构吗?

  • 此外,是否可以避免涉及交叉联接的步骤?

  • 推荐答案

    您可以使用 pdist 正方形方法。 html rel = noreferrer> scipy.spatial.distance :

    You can use pdist and squareform methods from scipy.spatial.distance:

    In [12]: df
    Out[12]:
      CITY   LATITUDE   LONGITUDE
    0    A  40.745392  -73.978364
    1    B  42.562786 -114.460503
    2    C  37.227928  -77.401924
    3    D  41.245708  -75.881241
    4    E  41.308273  -72.927887
    
    In [13]: from scipy.spatial.distance import squareform, pdist
    
    In [14]: pd.DataFrame(squareform(pdist(df.iloc[:, 1:])), columns=df.CITY.unique(), index=df.CITY.unique())
    Out[14]:
               A          B          C          D          E
    A   0.000000  40.522913   4.908494   1.967551   1.191779
    B  40.522913   0.000000  37.440606  38.601738  41.551558
    C   4.908494  37.440606   0.000000   4.295932   6.055264
    D   1.967551  38.601738   4.295932   0.000000   2.954017
    E   1.191779  41.551558   6.055264   2.954017   0.000000
    

    这篇关于使用 pandas 的欧几里得距离矩阵的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆