Cómo clasificar Pandas DataFrame por los valores de una columna
-
DataFrame
Orden de clasificación - Argumentoascending
-
dtaframe
Orden de clasificación - Argumentona_position
Introduciremos el método pandas.DataFrame.sort_values
para ordenar los valores del DataFrame
, y sus opciones como ascending
para especificar el orden de ordenación y na_position
que determina la posición de NaN
en el resultado ordenado.
Considera el siguiente DataFrame
,
import pandas as pd
df = pd.DataFrame(
{
"col1": ["g", "t", "n", "w", "n", "g"],
"col2": [5, 2, 5, 1, 3, 6],
"col3": [0, 7, 2, 8, 1, 2],
}
)
print(df)
Si ejecutas este código obtendrás la siguiente salida que aún no está ordenada.
col1 col2 col3
0 g 5 0
1 t 2 7
2 n 5 2
3 w 1 8
4 n 3 1
5 g 6 2
Ahora podríamos ordenar el DataFrame
con los códigos de abajo.
import pandas as pd
df = pd.DataFrame(
{
"col1": ["g", "t", "n", "w", "n", "g"],
"col2": [5, 2, 5, 1, 3, 6],
"col3": [0, 7, 2, 8, 1, 2],
}
)
print(df.sort_values(by=["col1"]))
Ordenamos el DataFrame
por col1
. Después de ejecutar el código anterior obtendrás la siguiente resultado.
col1 col2 col3
0 g 5 0
5 g 6 2
2 n 5 2
4 n 3 1
1 t 2 7
3 w 1 8
Podemos usar más de una columna para ordenar también. Cambiemos la última línea de los códigos anteriores de la siguiente manera,
print(df.sort_values(by=["col1", "col2"]))
Después de ejecutar el código obtendremos la siguiente salida.
col1 col2 col3
0 g 5 0
5 g 6 2
4 n 3 1
2 n 5 2
1 t 2 7
3 w 1 8
Ahora DataFrame
está ordenado por col2
también.
DataFrame
Orden de clasificación - Argumento ascending
Por defecto la clasificación es en orden ascendente, para ordenar el DataFrame
en orden descendente, necesitamos poner la bandera ascending=False
.
print(df.sort_values(by=["col1", "col2"], ascending=False))
Después de ejecutar el código obtendremos la siguiente resultado.
col1 col2 col3
3 w 1 8
1 t 2 7
2 n 5 2
4 n 3 1
5 g 6 2
0 g 5 0
dtaframe
Orden de clasificación - Argumento na_position
La na_position
especifica la posición de la Na
después de la clasificación, es decir, last
pone la NaN
al final. Su valor por defecto es first
que pone NaN
al principio del resultado ordenado.
Considere el siguiente DataFrame
,
import numpy as np
import pandas as pd
s = pd.Series([np.nan, 2, 4, 10, 7])
print(s.sort_values(na_position="last"))
Después de ejecutar el código obtendremos el siguiente resultado.
1 2.0
2 4.0
4 7.0
3 10.0
0 NaN