Pandas Latitude-Longitude to distance between successive rows [duplicate] Pandas Latitude-Longitude to distance between successive rows [duplicate] python python

Pandas Latitude-Longitude to distance between successive rows [duplicate]


you can use this great solution (c) @derricw (don't forget to upvote it ;-):

# vectorized haversine functiondef haversine(lat1, lon1, lat2, lon2, to_radians=True, earth_radius=6371):    """    slightly modified version: of http://stackoverflow.com/a/29546836/2901002    Calculate the great circle distance between two points    on the earth (specified in decimal degrees or in radians)    All (lat, lon) coordinates must have numeric dtypes and be of equal length.    """    if to_radians:        lat1, lon1, lat2, lon2 = np.radians([lat1, lon1, lat2, lon2])    a = np.sin((lat2-lat1)/2.0)**2 + \        np.cos(lat1) * np.cos(lat2) * np.sin((lon2-lon1)/2.0)**2    return earth_radius * 2 * np.arcsin(np.sqrt(a))df['dist'] = \    haversine(df.LAT.shift(), df.LONG.shift(),                 df.loc[1:, 'LAT'], df.loc[1:, 'LONG'])

Result:

In [566]: dfOut[566]:   Ser_Numb        LAT       LONG         dist0         1  74.166061  30.512811          NaN1         2  72.249672  33.427724   232.5497852         3  67.499828  37.937264   554.9054463         4  84.253715  69.328767  1981.8964914         5  72.104828  33.823462  1513.3979975         6  63.989462  51.918173  1164.4813276         7  80.209112  33.530778  1887.2568997         8  68.954132  35.981256  1252.5313658         9  83.378214  40.619652  1606.3407279        10  68.778571   6.607066  1793.921854

UPDATE: this will help to understand the logic:

In [573]: pd.concat([df['LAT'].shift(), df.loc[1:, 'LAT']], axis=1, ignore_index=True)Out[573]:           0          10        NaN        NaN1  74.166061  72.2496722  72.249672  67.4998283  67.499828  84.2537154  84.253715  72.1048285  72.104828  63.9894626  63.989462  80.2091127  80.209112  68.9541328  68.954132  83.3782149  83.378214  68.778571