我试图计算两个地点的距离,我得到了两个目的地的经度和纬度。在我的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}})
你没有提供数据,所以我根据你的问题编了我自己的;只需在列上使用这些函数的
numpy
版本生成的数据帧如下所示:
可以为距离计算定义自定义函数。然后,使用^{} 调用并在每一行上应用该函数,以获取每一行的距离
1。定义用于距离计算的自定义函数,如下所示:
2。使用^{} 调用并在每行上应用函数,以获取每行的距离,如下所示:
演示
输入数据帧
输出
您可以将
dlon
、dlat
、a
和c
全部设置为一些临时列,然后从这些临时列开始计算(或者将它们全部放在一个难以读取的行中)比如:
然后,如果需要,您可以
.drop()
所有这些额外的列,但这将创建df['distance'],作为为每行计算的新列如果我在代码中有输入错误,我不会感到惊讶,但希望你能理解。每个
df[xxx] =
行组成一个新列相关问题 更多 >
编程相关推荐