Python de bucle lento para buscar datos en un dataframe antoher en python

Tengo dos marcos de datos: uno con todos mis datos (llamado ‘datos’) y uno con latitudes y longitudes de estaciones diferentes donde cada observación comienza y termina (llamada ‘información’), estoy tratando de obtener un dataframe donde yo ‘ Tendré la latitud y longitud junto a cada estación en cada observación, mi código en python:

for i in range(0,15557580): for j in range(0,542): if data.year[i] == '2018' and data.station[i]==info.station[j]: data.latitude[i] = info.latitude[j] data.longitude[i] = info.longitude[j] break 

pero como tengo alrededor de 15 millones de observaciones, hacerlo requiere mucho tiempo, ¿hay alguna forma más rápida de hacerlo?

Muchas gracias (todavía soy nuevo en esto)

editar:

La información de mi archivo se ve así (alrededor de 500 observaciones, una para cada estación)

introduzca la descripción de la imagen aquí

datos de mi archivo como este (hay otras variables que no se muestran aquí) (aproximadamente 15 millones de observaciones, una para cada viaje)

introduzca la descripción de la imagen aquí

y lo que estoy buscando es que cuando los números de las estaciones coincidan con los datos resultantes se vería así:

introduzca la descripción de la imagen aquí

Esta es una solución. También puede usar pandas.merge para agregar 2 nuevas columnas a los data y realizar la asignación equivalente.

 # create series mappings from info s_lat = info.set_index('station')['latitude'] s_lon = info.set_index('station')['latitude'] # calculate Boolean mask on year mask = data['year'] == '2018' # apply mappings, if no map found use fillna to retrieve original data data.loc[mask, 'latitude'] = data.loc[mask, 'station'].map(s_lat)\ .fillna(data.loc[mask, 'latitude']) data.loc[mask, 'longitude'] = data.loc[mask, 'station'].map(s_lon)\ .fillna(data.loc[mask, 'longitude']) 

Este es un problema muy recurrente e importante cuando alguien comienza a manejar grandes conjuntos de datos. Big Data es un tema completo en sí mismo, aquí hay una introducción rápida a los conceptos principales.

1. Prepare su conjunto de datos

En big data, del 80% al 90% del tiempo se dedica a recostackr, filtrar y preparar sus conjuntos de datos. Cree subconjuntos de datos, optimizándolos para su posterior procesamiento.

2. Optimiza tu guión

Código corto no siempre significa código optimizado en términos de rendimiento. En su caso, sin saber acerca de su conjunto de datos, es difícil decir exactamente cómo debe procesarlo, tendrá que descubrir por su cuenta cómo evitar la mayor cantidad de cálculos posibles y obtener exactamente el mismo resultado. Intenta evitar cualquier cálculo innecesario.

También puede considerar dividir el trabajo en varios subprocesos si es apropiado.

Como regla general, no debe usar bucles y break dentro. Cuando no sepa exactamente cuántos bucles tendrá que atravesar en primer lugar, siempre debe usar el while o do...while bucles.

3. Considere usar almacenamiento distribuido y computación

Este es un tema en sí mismo que es demasiado grande para explicarlo aquí.

El almacenamiento, el acceso y el procesamiento de datos de forma serializada es más rápido que una pequeña cantidad de datos, pero es muy inadecuado para grandes conjuntos de datos. En su lugar, utilizamos el almacenamiento distribuido y los marcos informáticos.

Apunta a hacer todo en paralelo. Se basa en un concepto llamado MapReduce .

El primer marco de almacenamiento de datos distribuido fue Hadoop (por ejemplo, Hadoop Distributed File System o HDFS ). Este marco tiene sus ventajas y defectos, dependiendo de su aplicación.

En cualquier caso, si está dispuesto a usar este marco, es probable que sea más apropiado que no use MR directamente en el HDFS superior, sino en un nivel superior, preferiblemente en memoria, como Spark o Apache Ignite en la parte superior. de HDFS . Además, dependiendo de sus necesidades, intente echar un vistazo a marcos como Hive , Pig o Sqoop, por ejemplo.

Una vez más, este tema es un mundo completamente diferente, pero podría muy bien adaptarse a su situación. Siéntase libre de documentarse sobre todos estos conceptos y marcos, y deje sus preguntas si es necesario en los comentarios.