У меня есть следующий код, выполнение которого занимает очень много времени.Панды DataFrames df
и df_plants
очень малы (менее 1 МБ).Интересно, есть ли способ оптимизировать этот код:
import pandas as pd
import geopy.distance
import re
def is_inside_radius(latitude, longitude, df_plants, radius):
if (latitude != None and longitude != None):
lat = float(re.sub("[a-zA-Z]", "", str(latitude)))
lon = float(re.sub("[a-zA-Z]", "", str(longitude)))
for index, row in df_plants.iterrows():
coords_1 = (lat, lon)
coords_2 = (row["latitude"], row["longitude"])
dist = geopy.distance.distance(coords_1, coords_2).km
if dist <= radius:
return 1
return 0
df["inside"] = df.apply(lambda row: is_inside_radius(row["latitude"],row["longitude"],df_plants,10), axis=1)
Я использую регулярное выражение для обработки широты и долготы в df
, потому что значения содержат некоторые ошибки (символы), которые следует удалить.
Функция is_inside_radius
проверяет, находятся ли row[latitude]
и row[longitude]
в радиусе 10 км от любой из точек в df_plants
.