我有一个包含用户旅行数据的数据框。 数据框就像那样
dftS:
Trip XO YO XD YD StartingTime
1 -33.55682 -70.78614 -33.44007 -70.65520 2014-12-30 22:30:00
2 -33.49097 -70.77741 -33.48908 -70.76263 2014-12-30 18:30:00
3 -33.37108 -70.67110 -33.73425 -70.76278 2014-12-30 18:00:00
如果两次旅行的原点(XO,YO
)和目的地(XD,YD
)点最多相距D=1km
米并且如果它们有T=30min
米,我想将几次旅行组合在一起相同的起点和目的地区域,如果它们的起始时间最多相隔l=list()
N = len(dftS)
for i in range(0,N-1):
for j in range(i+1,N):
dt = abs(dftS.HoraIni[i]-dftS.HoraIni[j])
if dt.total_seconds() < deltat.total_seconds():
if haversine(dftS.XO[i], dftS.YO[i], dftS.XO[j], dftS.YO[j]) < 1:
if haversine(dftS.XD[i], dftS.YD[i], dftS.XD[j], dftS.YD[j]) < 1:
g=list()
g.append(i)
g.append(j)
l.append(g)
分钟。为了达到这个结果,我正在做以下事情:
def haversine(lon1, lat1, lon2, lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# convert decimal degrees to radians
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
r = 6371 # Radius of earth in kilometers. Use 3956 for miles
return c * r
为了计算两点之间的距离我使用所谓的半正函数
pip install module
我想知道是否有更紧凑的方法来使用Python解决这个问题