Pandas Dataframe: une elementos en rango según sus coordenadas geográficas (longitud y latitud)

Obtuve un marco de datos que contiene lugares con su latitud y longitud. Imagina por ejemplo ciudades.

df = pd.DataFrame([{'city':"Berlin", 'lat':52.5243700, 'lng':13.4105300},
                   {'city':"Potsdam", 'lat':52.3988600, 'lng':13.0656600},
                   {'city':"Hamburg", 'lat':53.5753200, 'lng':10.0153400}]);

Ahora estoy tratando de poner todas las ciudades en un radio alrededor de otra. Digamos que todas las ciudades están a una distancia de 500 km de Berlín, a 500 km de Hamburgo, etc. Lo haría duplicando el marco de datos original y uniendo ambos con una función de distancia.

El resultado intermedio sería algo así:

Berlin --> Potsdam
Berlin --> Hamburg
Potsdam --> Berlin
Potsdam --> Hamburg
Hamburg --> Potsdam
Hamburg --> Berlin

Este resultado final después de la agrupación (reducción) debería ser así.Observación: Sería genial si la lista de valores incluye todas las columnas de la ciudad.

Berlin --> [Potsdam, Hamburg]
Potsdam --> [Berlin, Hamburg]
Hamburg --> [Berlin, Potsdam]

O simplemente el recuento de ciudades a 500 km alrededor de una ciudad.

Berlin --> 2
Potsdam --> 2
Hamburg --> 2

Como soy bastante nuevo en Python, agradecería cualquier punto de partida. Estoy familiarizado con la distancia haversine. Pero no estoy seguro si hay métodos útiles de distancia / espacio en Scipy o Pandas.

Me alegro si puedes darme un punto de partida. Hasta ahora intenté seguiresta publicación.

Actualizar: La idea original detrás de esta pregunta proviene delTwo Sigma Connect Listado de alquiler Kaggle Competition. La idea es conseguir que esos listados se encuentren a 100 metros alrededor de otro listado. Que a) indica una densidad y, por lo tanto, un área popular yb) si se comparan las direcciones, puede averiguar si hay un cruce y, por lo tanto, un área ruidosa. Por lo tanto, no necesita la relación ítem completo a ítem ya que necesita comparar no solo la distancia sino también la dirección y otros metadatos.PD: No estoy cargando una solución para Kaggle. Solo quiero aprender

Respuestas a la pregunta(2)

Su respuesta a la pregunta