Veamos con un ejemplo los filtros que podemos aplicar sobre los "dataframes". Usaremos nuevamente el archivo con la información de peajes de Colombia que usábamos en el "Manos a la Obra" pasada. En la imagen, podemos ver las columnas con que contamos para que recordemos el conjunto de datos. Pasemos ahora a trabajar algunos filtros para ver cómo podemos manipular los datos que tenemos según la información que queramos estudiar. Ya he cargado los datos en el "dataframe" llamado Peajes. Así que, empecemos por aplicar algunos filtros sobre las columnas. Supongamos que necesitamos saber cuáles son los peajes que quedan en Cundinamarca o Tolima. Vamos a aplicar, entonces, un filtro sobre la columna DEP y guardemos el resultado en una variable. La sintaxis para esto es la siguiente: de los peajes, seleccionamos la columna "DEP" y revisamos, con igual igual, que el valor corresponda a Cundinamarca. Con Tolima, necesitamos hacer lo mismo, para la cual incluimos el operador "o", que consiste en una barra vertical, la que tenemos, en este caso, en pantalla. Ahora, obtengamos nombre y departamento del resultado y podemos ver que solo se muestran aquellos donde el departamento es alguno de los que nos interesa. Tomaré aquí nuestra variable, la consulta, y la aplicamos acá, sobre la terminal, para ver que efectivamente solo se muestran los peajes de Tolima o Cundinamarca. Ahora, filtremos sobre algunas tarifas. Por ejemplo, los peajes donde la tarifa de las categorías seis o siete es mayor a 50.000. Entonces, de nuevo necesitamos aplicar un filtro seleccionando la columna "CAT6" y "CAT7" y mirando que sean mayores que 50.000. Como nos interesan los registros donde ambas columnas son mayores a 50.000, usamos el operador "y" entre nuestros condicionales, denotando con el símbolo ampersand, que viene siendo este que voy a seleccionar en la pantalla. Guardamos el resultado en una variable y veamos ahora los nombres de los peajes, junto a sus tarifas, para comprobar que efectivamente se realiza el filtro como lo necesitamos. Acá podemos ver que efectivamente está el nombre y que todos los peajes en ambas tarifas son siempre mayores que 50.000. También, podemos utilizar el método "isin" para filtrar, por ejemplo, por los peajes que estén ubicados en Atlántico o Valle del Cauca. En este caso nos queda: si peajes DEP "isin", incluimos la lista de los posibles valores que serían Atlántico o Valle del Cauca. Filtramos y ahora veamos nombre y departamento para verificar que está funcionando correctamente. Lo tomaremos acá y lo incluiré para que efectivamente comprobemos que se muestran los peajes solamente de Valle del Cauca o de Atlántico. Vamos ahora a agregar columnas calculadas a partir de datos con los que ya contamos en el "dataframe". Vamos a agregar dos columnas, una con el nombre del peaje más cercano y la distancia al mismo en línea recta que podemos calcular a partir de la latitud y longitud de cada peaje. He creado ya una función que calcula la distancia entre dos puntos en la Tierra, a partir de las latitudes y longitudes, como podemos ver acá, en la cual no entraré en mayor detalle. Pero, ¿qué podemos ver ahí? Y otra función que recibe el "dataframe" y calcula y agrega las nuevas columnas. Estudiemos la función con detenimiento. Empezamos creando dos listas dónde almacena haremos las distancias y nombres de los peajes más cercanos a cada peaje. Estas nos permitirán, luego, poder agregar los datos como nuevas columnas. Ahora recorremos nuestro "dataframe". Con el primer ciclo, obtenemos un peaje y creamos variables para almacenar la distancia y nombre del peaje más cercano del actual, que inician con valor infinito y vacío para determinar el menor, luego. Con el otro recorrido vamos comparando contra todos los demás peajes, calculando la distancia y viendo si es la menor. Cuando el ciclo interno termine, ya tendremos el peaje más cercano, el de la posición "i", así que almacenamos estos datos en las listas. Finalmente, cuando terminé la ejecución de los ciclos, tendremos las listas con las distancias y nombres de los peajes más cercanos de cada uno de los peajes. Para crear las columnas tomamos el "dataframe" y, como si agregáramos una entrada nueva a un diccionario, le damos nombre a las columnas y asignamos nuestras listas. Es importante tener en cuenta que la lista debe tener tantos elementos como filas tenga el "dataframe", para que cada registro quede con valor o, si no, ocurrirá un error. He creado también un corto programa principal para probar la función dónde se invoca y luego mostramos nombre, peaje más cercano y distancia al mismo, de cinco de los peajes ubicados en Cundinamarca. Los que van de la posición cinco a la diez. Ejecutemos y podemos ver el resultado que muestra cómo nuestro "dataframe" tiene ahora las nuevas columnas de más cercano y la distancia más cerca de cinco de los peajes ubicados en Cundinamarca.