问题描述
我有一个如下所示的pandas数据框,包括四列,但每行有两个点(lat1,lon1)和(lat2,lon2):
lat1 lon1 lat2 lon2
========= ========= ========= =========
30.172705 31.126725 30.188281 31.132326
30.272805 31.226725 30.288281 31.232326
30.372905 31.326725 30.388281 31.332326
30.472105 31.426725 30.488281 31.432326
30.572205 31.526725 30.588281 31.532326
使用geopy
计算KM中每一行中提到的(lat1,lon1)和(lat2,lon2)之间的距离的最有效方法是什么?
解决方法
您的经纬度是什么坐标系?
让我们尝试Euc- squrt(delta(lat)**2+ delta(lon)**2)
df['dist']=((df.lat1.sub(df.lat2)**2).add(df.lon1.sub(df.lon2)**2))**0.5
,
即使您似乎自己还没有进行任何研究,也可以: 简短的谷歌搜索结果:https://geopy.readthedocs.io/en/stable/#module-geopy.distance
动手了,您现在可以相对容易地找到如何在熊猫中访问DF并应用操作(@wwnde已经表明了这一点)。
将这两个基础知识结合起来即可:
import pandas as pd
import numpy as np
from geopy import distance
# Generate some random data (lon,lat must be in (-90,90)
df = pd.DataFrame(np.random.randint(-90,90,size=(100,4)),columns=list(['lo1','la1','lo2','la2']))
print(df)
# applies the distance function as described in the provided link
df['km'] = df.apply(lambda x: distance.distance((x[0],x[1]),(x[2],x[3])),axis=1)
print(df)
此外,我发现this是第一个链接,但由于解决方案非常简单,所以没有阅读。
如StackOverflow的CoC所建议,请提供您尝试过的内容,并具有正确的行为以简单地查看Google。