python - 使用 Pandas 的欧几里德距离矩阵

标签 python pandas dataframe

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

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

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

         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 数据框中,并创建了一个交叉连接,如下所示:

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')  
  • 你能帮我创建上面的矩阵结构吗?
  • 此外,是否可以避免涉及交叉连接的步骤?

最佳答案

您可以使用 pdistsquareform来自 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

关于python - 使用 Pandas 的欧几里德距离矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39203662/

相关文章:

python - 在 Jupyterlab 中导入 sklearn.compose.make_column_selector 时遇到问题

python - 在图像之上绘制

python - 如何有效地从我的数据框中获取列子集的 numpy 数组?

python - 在不循环的情况下将日期时间系列转换为 Pandas 中的字符串

python - 在 pandas MultiIndex DataFrame 中按级别对列求和

python - 在终端上运行 Python 脚本,然后继续使用终端

python - Python 中的线程

python - 仅当 python 中两行之间存在差异时才对 Pandas.DataFrame 对象进行子集化

python - 如何解决这个不断变化的数据框问题

python - 以矢量化方式将列添加到 pandas DataFrame 中以其他列值为条件