Quadro de dados do Pandas: junte itens no intervalo com base em suas coordenadas geográficas (longitude e latitude)

Eu tenho um quadro de dados que contém lugares com latitude e longitude. Imagine, por exemplo, cidades.

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}]);

Agora estou tentando obter todas as cidades em um raio em torno de outra. Digamos que todas as cidades estejam a 500 km de Berlim, 500 km de Hamburgo e assim por diante. Eu faria isso duplicando o quadro de dados original e juntando ambos com uma função de distância.

O resultado intermediário seria algo assim:

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

Este resultado final após o agrupamento (redução) deve ser assim.Observação: Seria legal se a lista de valores incluir todas as colunas da cidade.

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

Ou apenas a contagem de cidades 500 km em torno de uma cidade.

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

Desde que eu sou bastante novo em Python, eu apreciaria qualquer ponto de partida. Eu estou familiarizado com a distância da costa. Mas não tenho certeza se existem métodos espaciais / distâncias úteis no Scipy ou no Pandas.

Fico feliz se você pode me dar um ponto de partida. Até agora eu tentei seguiresta postagem.

Atualizar: A idéia original por trás dessa pergunta vem doCompetição Kaggle da Listagem de aluguel Two Sigma Connect. A idéia é obter aqueles que listam 100m em torno de outro. Qual a) indica uma densidade e, portanto, uma área popular eb) se os endereços são comparáveis, você pode descobrir se há uma passagem e, portanto, uma área barulhenta. Portanto, você não precisa da relação item a item completo, pois precisa comparar não apenas a distância, mas também o endereço e outros metadados.PS: Não estou carregando uma solução para o Kaggle. Eu só quero aprender.

questionAnswers(2)

yourAnswerToTheQuestion