Я пытаюсь подсчитать все точки, которые находятся в радиусе 15 миль от другой указанной c точки. Эти точки находятся в разных фреймах данных, и я хотел бы разделить их, если возможно. В Dataframe A
есть значительно больше строк, поэтому я хотел бы сделать своего рода вложенность для l oop, чтобы выполнить итерацию строки 1 из DF B
в каждой строке 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
.