[MÚSICA] [MÚSICA] Veamos cómo podemos manipular diferentes DataFrames para complementar los datos que contiene. Vamos a seguir trabajando con el archivo de peajes de Colombia, cuyas columnas podemos ver en pantalla en este momento. Pero vamos ahora a complementar esa información con otro archivo que incluye datos de más peajes y alguna información adicional sobre estas, como si el peaje cuenta con pago electrónico o no. Nuestro nuevo archivo va a tener columnas en común como el que you teníamos, pero va a contar con otras columnas nuevas. Las columnas de cada una de los archivos las vemos en pantalla, donde podemos notar las que se comparten y las que son diferentes. Vamos a mezclar los archivos usando el nombre de cada peaje como intersección para quedar con la información completa de los dos. Empezaremos leyendo los archivos, y como dijimos, los mezclamos usando el método merge, indicando que la unión la hacemos sobre las columnas llamadas NOMBRE en cada archivo. Tenemos que tener en cuenta que en cada archivo aparecen algunos peajes que en el otro no, de modo que tendremos que agregarlos encontrando cuáles hacen falta de cada archivo y luego concatenar sus datos. Obtenemos entonces la lista de los peajes you presentes usando un unique sobre la columna NOMBRE de la mezcla. Y luego miramos los faltantes de cada archivo aplicando un filtro con un is in negado sobre la columna NOMBRE para hallar los peajes que no quedaron en la mezcla. Finalmente, el DataFrame completo será la concatenación de la mezcla con los faltantes de cada archivo que obtenemos usando el método concat de Pandas. El proceso que acabamos de realizar también podríamos haberlo resuelto utilizando un outer joint. Si quieres estudiar más acerca de este proceso te invitamos a revisar la documentación oficial de Pandas, cuyo enlace puedes ver en pantalla. Si usamos info para ver los detalles del DataFrame resultante, vemos que quedan varias columnas para representar las tarifas de las diferentes categorías. Más específicamente, quedan tres columnas por cada categoría. Por ejemplo, CAT_1, CAT1_y, y más arriba también está CAT1_x. Vamos a unificar esta información para que quede una única columna por cada categoría. La función que he implementado hace justamente eso. Estudiemos en detalle esta. Empezamos obteniendo una lista con los nombres de las columnas de las tarifas que son todas las que incluyen la cadena CAT en su nombre, y usamos estas columnas para filtrar el DataFrame y quedarnos con solamente esta información. De paso, creamos un diccionario donde almacenaremos los datos de cada categoría. Quedará una entrada por categoría, donde la llave será el número de la categoría, y el valor, una lista con las tarifas de cada peaje para dicha categoría. Empezamos con un ciclo para obtener cada una de las categorías, de la 1 a la 7. Y para cada una, recorremos todos sus registros o filas usado otro ciclo. Antes de recorrer las filas, obtenemos las tres columnas de la categoría que estamos revisando y agregamos una entrada al diccionario con el número de la categoría, y una lista que por ahora estará vacía. you en el ciclo interno de cada registro obtenemos el valor que tiene para las tres columnas de la categoría para determinar la tarifa a partir de estas. Si la columna que no incluye x o y en su nombre es nula, significa que la tarifa será la mayor entre la x y la y. Si no era nula, nos quedamos con el máximo entre las tres columnas. you después de determinar la tarifa, la agregamos a la lista correspondiente en el diccionario. Cuando you tengamos el diccionario listo, lo recorremos para ir creando cada columna en el DataFrame y de paso, borrar las columnas x y y que you no necesitamos. Invoquemos la función desde la terminal y le damos un nuevo info. Esta vez lo haremos, entonces, invoquemos la función sobre la terminal primero, nos queda entonces integrar tarifas, [SONIDO] [SONIDO] le pasamos el DataFrame resultante del merge y la concatenación, y ejecutemos un info sobre este. [SONIDO] Vemos que ahora sí queda, efectivamente, solo una columna por categoría, la que está acá abajo, y podemos ver todas arriba. Vemos aquí que you queda una sola columna por categoría, que no va a tener nulos los 117 valores que tiene el DataFrame, los registros que tiene el DataFrame van a quedar con valor y es de tipo In 64. Entonces, todo esto es el resultante de la operación que acabamos de realizar. [MÚSICA]