Cómo clasificar Pandas DataFrame por los valores de una columna

Asad Riaz 30 enero 2023
  1. DataFrame Orden de clasificación - Argumento ascending
  2. dtaframe Orden de clasificación - Argumento na_position
Cómo clasificar Pandas DataFrame por los valores de una columna

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

Artículo relacionado - Pandas DataFrame