Los objetos DataFrame de Pandas cuentan con un par de métodos mediante los cuales se puede ordenar los registros en base a los valores de una o varias columnas y obtener como resultado los n primeros. Una funcionalidad con la que se puede simplificar algunos análisis. En concreto, el método df.nlargest()
ordena de mayor a menor los registros de un conjunto de datos y devuelve los n primeros. Para obtener los valores ordenados de modo ascendente debería usarse el método df.nsmallest()
. Veamos a continuación como usar estos métodos para conseguir los primeros registros ordenados de un DataFrame.
Primeros registros ordenados de un DataFrame en base a los valores de una columna
En esta ocasión vamos a emplear el conjunto de datos tips de Seaborn a modos de ejemplo. Un conjunto de datos que ya se han usado en otras ocasiones y en el que se pueden ver las propinas recibidas en un restaurante. Para importar el conjunto de datos solamente se tienen que importar la función load_dataset()
y ejecutar el siguiente código.
from seaborn import load_dataset tips = load_dataset("tips") tips.head()
total_bill tip sex smoker day time size 0 16.99 1.01 Female No Sun Dinner 2 1 10.34 1.66 Male No Sun Dinner 3 2 21.01 3.50 Male No Sun Dinner 3 3 23.68 3.31 Male No Sun Dinner 2 4 24.59 3.61 Female No Sun Dinner 4
Obteniendo un conjunto de datos con siete carteristas.
Ahora, si se desea obtener los 6 registros en los que los clientes hayan dejado una mayor propina se puede usar el método df.nlargest()
. Siendo el primer parámetro el número de registros que se desea obtener como resultado y el segundo la columna usada para ordenar los datos. En el ejemplo planteado anteriormente esto sería 6 y 'tip' respectivamente. Lo que se hace en el siguiente código.
tips.nlargest(6, 'tip')
total_bill tip sex smoker day time size 170 50.81 10.00 Male Yes Sat Dinner 3 212 48.33 9.00 Male No Sat Dinner 4 23 39.42 7.58 Male No Sat Dinner 4 59 48.27 6.73 Male No Sat Dinner 4 141 34.30 6.70 Male No Thur Lunch 6 183 23.17 6.50 Male Yes Sun Dinner 4
Con lo que se obtiene el resultado deseado.
Primeros registros ordenados de un DataFrame en base a los valores de varias columnas
El método df.nlargest()
también admite como segundo parámetro una lista con los nombres de las columnas. En tal caso ordenará los registros primero por la primera columna y posteriormente por la segunda. Por lo que, por ejemplo, se podría ordenar los registros primero en base al tamaño de la mesa y posteriormente en base a la propina. Algo que se puede conseguir con el siguiente código.
tips.nlargest(6, ['size', 'tip'])
total_bill tip sex smoker day time size 141 34.30 6.70 Male No Thur Lunch 6 143 27.05 5.00 Female No Thur Lunch 6 156 48.17 5.00 Male No Sun Dinner 6 125 29.80 4.20 Female No Thur Lunch 6 155 29.85 5.14 Female No Sun Dinner 5 142 41.19 5.00 Male No Thur Lunch 5
En donde se puede ver que en primer lugar aparecen los registros para la mesa 6 comensales y luego la de 5. Ordenando en segundo lugar los registros en base a la propina.
Obtener los registros ordenados de menor a mayor
El método df.nlargest()
ordena los registros de mayor a menor, esto es, en orden descendente. Si se desea ordenar los vales de menor a mayor, en orden asiente, se deberá recurrir al método df.nsmallest()
. Un método que admite exactamente los mismos parámetros. Así, se puede repetir el ejemplo anterior, pero cambiar la forma de ordenar.
tips.nsmallest(6, ['size', 'tip'])
total_bill tip sex smoker day time size 67 3.07 1.00 Female Yes Sat Dinner 1 111 7.25 1.00 Female No Sat Dinner 1 82 10.07 1.83 Female No Thur Lunch 1 222 8.58 1.92 Male Yes Fri Lunch 1 92 5.75 1.00 Female Yes Fri Dinner 2 236 12.60 1.00 Male Yes Sat Dinner 2
Conclusiones
En esta ocasión se ha visto una serie de métodos mediante los que es posible conseguir los primeros registros ordenados de un DataFrame Pandas. Unos métodos con los que se puede simplificar este tipo de análisis. Aunque esto también se puede conseguir ordenando manualmente los DataFrames, si se desea obtener solamente los primeros registros esta es una forma mucho más sencilla de conseguirlo.