【发布时间】:2021-10-11 14:55:15
【问题描述】:
我正在尝试计算与 2 个位置的距离,并且我已经获得了两个目的地的经度和纬度。在我的 CSV 中,我有 4 列(lat1、lon1、lat2、lon2),如何应用下面的代码,以便创建名为“距离”的第 5 列,并使用下面的代码计算距离?
import math
from math import sin, cos, sqrt, atan2, radians
# approximate radius of earth in km
R = 6373.0
#Test
lat1 = radians(25.2296756)
lon1 = radians(36.0122287)
lat2 = radians(51.406374)
lon2 = radians(20.9251681)
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
distance = R * c
print("Result:", distance)
print("Should be:", 3181.11, "km")
数据框:
df = pd.DataFrame({'Normalised': {(0, 'London,', 'United', 'Kingdom'): '-',
(1, 'Johannesburg,', 'South', 'Africa'): '-',
(2, 'London,', 'United', 'Kingdom'): '-',
(3, 'Johannesburg,', 'South', 'Africa'): '-',
(4, 'London,', 'United', 'Kingdom'): '-'},
'City': {(0, 'London,', 'United', 'Kingdom'): 'New',
(1, 'Johannesburg,', 'South', 'Africa'): 'London,',
(2, 'London,', 'United', 'Kingdom'): 'New',
(3, 'Johannesburg,', 'South', 'Africa'): 'London,',
(4, 'London,', 'United', 'Kingdom'): 'Singapore,'},
'Pair': {(0, 'London,', 'United', 'Kingdom'): 'York,',
(1, 'Johannesburg,', 'South', 'Africa'): 'United',
(2, 'London,', 'United', 'Kingdom'): 'York,',
(3, 'Johannesburg,', 'South', 'Africa'): 'United',
(4, 'London,', 'United', 'Kingdom'): 'Singapore'},
'Departure': {(0, 'London,', 'United', 'Kingdom'): 'United',
(1, 'Johannesburg,', 'South', 'Africa'): 'Ki...',
(2, 'London,', 'United', 'Kingdom'): 'United',
(3, 'Johannesburg,', 'South', 'Africa'): 'Ki...',
(4, 'London,', 'United', 'Kingdom'): 'SIN'},
'Code': {(0, 'London,', 'United', 'Kingdom'): 'Stat.',
(1, 'Johannesburg,', 'South', 'Africa'): 'JNB',
(2, 'London,', 'United', 'Kingdom'): 'Stat',
(3, 'Johannesburg,', 'South', 'Africa'): 'JNB',
(4, 'London,', 'United', 'Kingdom'): 'LHR'},
'Arrival': {(0, 'London,', 'United', 'Kingdom'): 'LHR',
(1, 'Johannesburg,', 'South', 'Africa'): 'LHR',
(2, 'London,', 'United', 'Kingdom'): 'LHR',
(3, 'Johannesburg,', 'South', 'Africa'): 'LHR',
(4, 'London,', 'United', 'Kingdom'): '1.3'},
'Code.1': {(0, 'London,', 'United', 'Kingdom'): 'JFK',
(1, 'Johannesburg,', 'South', 'Africa'): '-26.1',
(2, 'London,', 'United', 'Kingdom'): 'JFK',
(3, 'Johannesburg,', 'South', 'Africa'): '-26.1',
(4, 'London,', 'United', 'Kingdom'): '103.98'},
'Departure_lat': {(0, 'London,', 'United', 'Kingdom'): 51.5,
(1, 'Johannesburg,', 'South', 'Africa'): 28.23,
(2, 'London,', 'United', 'Kingdom'): 51.5,
(3, 'Johannesburg,', 'South', 'Africa'): 28.23,
(4, 'London,', 'United', 'Kingdom'): 51.47},
'Departure_lon': {(0, 'London,', 'United', 'Kingdom'): -0.45,
(1, 'Johannesburg,', 'South', 'Africa'): 51.47,
(2, 'London,', 'United', 'Kingdom'): -0.45,
(3, 'Johannesburg,', 'South', 'Africa'): 51.47,
(4, 'London,', 'United', 'Kingdom'): -0.45},
'Arrival_lat': {(0, 'London,', 'United', 'Kingdom'): 40.64,
(1, 'Johannesburg,', 'South', 'Africa'): -0.45,
(2, 'London,', 'United', 'Kingdom'): 40.64,
(3, 'Johannesburg,', 'South', 'Africa'): -0.45,
(4, 'London,', 'United', 'Kingdom'): np.nan},
'Arrival_lon': {(0, 'London,', 'United', 'Kingdom'): -73.79,
(1, 'Johannesburg,', 'South', 'Africa'): np.nan,
(2, 'London,', 'United', 'Kingdom'): -73.79,
(3, 'Johannesburg,', 'South', 'Africa'): np.nan,
(4, 'London,', 'United', 'Kingdom'): np.nan}})
【问题讨论】:
-
所以这个问题真的更多是关于向数据框/csv 添加新列而不是计算距离对吗?
-
正确,我把标题改错了
-
你需要更清楚你想要做什么。
-
我试图让我的问题更清楚:)
标签: python pandas dataframe distance haversine