使用 pandas 的欧几里得距离矩阵 [英] Euclidean Distance Matrix Using Pandas
本文介绍了使用 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屋!
查看全文