python - 使用每个城市的所有可能组合计算 5 个城市之间的地理距离
问题描述
所以我有一个由 3 列(城市、纬度、经度)组成的 csv 文件,并且我使用此代码从这个 csv 文件在 python 中创建了一个数据框
data = pd.read_csv("lat_long.csv",nrows=10)
Lat = data.lat.tolist()
Lon = data.lon.tolist()
suburb = data.suburb.tolist()
dict={'Latitude':Lat,'Longitude':Lon}
df = pd.DataFrame(dict,index=(suburb))
输出是这样的
Latitude Longitude
AUSTRALIAN NATIONAL UNIVERSITY -35.277272 149.117136
BARTON -35.201372 149.095065
DARWIN -12.801028 130.955789
DARWIN -12.801028 130.955789
PARAP -12.432181 130.843310
ALAWA -12.378451 130.877014
BRINKIN -12.367769 130.869808
CASUARINA -12.376597 130.850489
JINGILI -12.385761 130.873726
LEE POINT -12.360865 130.891349
现在我想要的是从 1 个城市到其他 9 个城市的距离的所有可能组合。它应该看起来像
DISTANCE
AUSTRALIAN NATIONAL UNIVERSITY- BARTON
AUSTRALIAN NATIONAL UNIVERSITY - DARWIN
AUSTRALIAN NATIONAL UNIVERSITY - DARWIN
AUSTRALIAN NATIONAL UNIVERSITY - PARAP
我尝试过使用嵌套的 for 循环来做到这一点,它可以工作,但我想要快一点。
解决方案
我从数据框开始
city Latitude Longitude
0 AUSTRAL. -35.277272 149.117136
1 BARTON -35.201372 149.095065
2 DARWIN -12.801028 130.955789
3 DARWIN -12.801028 130.955789
4 PARAP -12.432181 130.843310
5 ALAWA -12.378451 130.877014
6 BRINKIN -12.367769 130.869808
7 CASUARINA -12.376597 130.850489
8 JINGILI -12.385761 130.873726
9 LEE_POINT -12.360865 130.891349
并创建新列,它只是创建我们通过将数据框与自身合并获得的笛卡尔积的帮助。
df['join'] = 1
df_joined = pd.merge(df, df,on='join')
df_joined['haversine_dist'] = df_joined.apply(lambda x: haversine((x.Latitude_x, x.Longitude_x),(x.Latitude_y,x.Longitude_y)), 1)
结果(仅前 5 列)
city_x Latitude_x Longitude_x join city_y Latitude_y Longitude_y haversine_dist
0 AUSTRAL. -35.277272 149.117136 1 AUSTRAL. -35.277272 149.117136 0.000000
1 AUSTRAL. -35.277272 149.117136 1 BARTON -35.201372 149.095065 8.674473
2 AUSTRAL. -35.277272 149.117136 1 DARWIN -12.801028 130.955789 3093.972598
3 AUSTRAL. -35.277272 149.117136 1 DARWIN -12.801028 130.955789 3093.972598
4 AUSTRAL. -35.277272 149.117136 1 PARAP -12.432181 130.843310 3135.034018
5 AUSTRAL. -35.277272 149.117136 1 ALAWA -12.378451 130.877014 3138.077950
推荐阅读
- automation - Vividus 工具无法解析日期表达式
- javascript - 将文本设置为默认值 - V̶u̶l̶n̶e̶r̶a̶b̶i̶l̶i̶t̶y̶ -> 漏洞
- llvm - malloc 或 _Znwm,我们应该在 LLVM IR 系统中使用它
- docusignapi - 如何使用 REST API 定义信封中的文档顺序?
- java - 计算元音的数量并以具有更多元音的字符串优先的方式打印它们
- docker - 在测试网络中使用 Hyperledger Fabric 示例运行“network.sh up”时出错
- numpy - 将矩阵转换为 LAPACK 的最快实现
- django - 如何只保存已更改的模型对象?
- java - 使用索引从jar中获取文件
- typescript - DynamoDB 表查询 KeyConditionExpression 错误