У меня есть dataframe, который содержит маршруты отправления по назначению пользователей между разными точками (широта/долгота). Таким образом, мы имеем Origin_X, Origin_Y
и Destination_X, Destination_Y
Python: как сгруппировать точки на заданном расстоянии?
df:
Trip Origin_X Origin_Y Destination_X Destination_Y
1 -33.55682 -70.78614 -33.44007 -70.6552
2 -33.49097 -70.77741 -33.48908 -70.76263
3 -33.37108 -70.6711 -33.73425 -70.76278
Я хочу, чтобы сгруппировать вместе все Trip
, что есть в радиусе 1km
как в начале координат и назначения. Две поездки можно сгруппировать, если их расстояние до места назначения и их расстояние в пункте назначения - d<=1km
. Чтобы вычислить расстояние между двумя координатами, я использую функцию haversine
.
def haversine(lon1, lat1, lon2, lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# convert decimal degrees to radians
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
r = 6371 # Radius of earth in kilometers. Use 3956 for miles
return c * r
Пожалуйста, проверьте этот вопрос для vectorised метод расчета гаверсинуса вы можете добавить это в качестве нового столбца расстояния, а затем bucket/filter df: http://stackoverflow.com/questions/25767596/using-haversine-form ул-с-данных хранятся-в-панды-dataframe – EdChum