我正在尝试计算另一个特定点半径15英里以内的所有点。这些点位于不同的数据框中,如果可能,我想将它们分开。 Dataframe A
的行要多得多,因此我想进行某种嵌套的for循环,以使DF B
的第1行遍历DF A
的每一行。
我有这个公式,当我手动输入经度和纬度时有效,但是有没有办法调用数据框并在两个数据框之间迭代循环?
import numpy as np
def 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.
Output is in kilometers, added last return calculation to get convert to miles
Converted to boolean output to simplify column for DF
"""
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
miles_in_distance = (earth_radius * 2 * np.arcsin(np.sqrt(a))) / 1.609
return miles_in_distance <= 15
是否可以调用make一个看起来像这样的函数?
import numpy as np
def haversine(a_lat, a_lon, earth_radius=6371):
A_df[a_lat], A_df[a_lon] =
np.radians([a_lat, a_lon])
for x,y in range(len(B_df)):
B_df[b_lat], B_df[b_lon] = np.radians([b_lat, b_lon])
a = np.sin((b_lat-a_lat)/2.0)**2 + \
np.cos(a_lat) * np.cos(b_lat) * np.sin((b_long-a_lon)/2.0)**2
miles_in_distance = (earth_radius * 2 * np.arcsin(np.sqrt(a))) / 1.609
return miles_in_distance <= 15
理想情况下,我想将此添加回A_df
。