Я пытаюсь сгенерировать идентификаторы ячеек s2, используя столбцы широты и долготы из кадра данных Pandas. Какой самый эффективный способ сделать это?
Я уже пытался применить метод 'apply', чтобы добавить новый столбец в фрейм данных, но он очень медленный. Можно ли векторизовать?
import s2sphere
from s2sphere import LatLng, Cap, Angle, RegionCoverer
import math
def get_cell_ids(lat, long, level, radius):
EARTH_RADIUS = 6371000
region = Cap.from_axis_angle(LatLng.from_degrees(lat, long).to_point(),Angle.from_degrees(360*radius/(2*math.pi*EARTH_RADIUS)))
coverer = RegionCoverer()
coverer.min_level = level
coverer.max_level = level
cells = coverer.get_covering(region)
return sorted([x.id() for x in cells])[0]
Вызов функции с использованием apply:
df['s2_cell_ids_search'] = df.apply(lambda x: get_cell_ids(x.loclat, x.loclng, 10, 0), axis=1)
Фрейм данных:
event_checkin event_checkout userprofileid city hotelid loclat loclng
2019-12-17 2019-12-18 10003315 Delhi 37318 28.650595 77.23033
Как можно векторизовать метод?