Tengo un marco de datos con columnas de latitud y longitud,

df = pd.DataFrame({'Latitude':[47.5112, 47.7210, 47.7379, 47.5208, 47.6168],
                    'Longitude':[-122.257, -122.319, -122.233, -122.393, -122.045]})

¿Cómo creo una columna que mida la distancia hacia una ubicación en particular con coordenadas (47.631872, -122.217109)?

En particular, me gustaría usar la función geodesic de geopy para la distancia: from geopy.distance import geodesic. Toma las entradas de 2 tuplas que contienen latitudes y longitudes, y genera la distancia.

1
spidermarn 15 ago. 2020 a las 19:52

2 respuestas

La mejor respuesta

Utilice apply

location = (47.631872, -122.217109)
df["distance"] = df.apply(lambda x:geodesic((x["Latitude"], x["Longitude"]), location), axis=1)
2
Dishin H Goyani 16 ago. 2020 a las 09:34

Suponiendo que desea crear una nueva columna dentro del DataFrame con la distancia deseada:

location = (40.5, 47.7) # example of coordinates of your desired location, change as needed

df["Distance To Location"] = geodesic((df["Latitude"],df["Longitude"]),location)

Su marco de datos ahora tendrá una tercera columna con un puntero a una serie de pandas de objetos geodésicos de cada fila lat / long y coordenadas de ubicación proporcionadas.

Opcionalmente, si solo desea el valor de distancia real (flotación) en, por ejemplo, "millas", puede hacer algo como esto:

# To get the float value of the distance in miles
df["Distance To Location"] = geodesic((df["Latitude"],df["Longitude"]),location).miles

Y debería guardar el valor flotante en millas para cada fila directamente en su marco de datos.

1
Code Ninja 2C4U 15 ago. 2020 a las 18:31