Python:如何将给定距离和时间分开的旅行组合在一起?

时间:2016-05-04 14:59:37

标签: python dataframe group-by

我有一个包含用户旅行数据的数据框。 数据框就像那样

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解决这个问题

0 个答案:

没有答案