Для циклов между двумя кадрами данных - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь подсчитать все точки, которые находятся в радиусе 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.

...