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