Como Classificar Pandas DataFrame pelos Valores de uma Coluna
-
Ordem de classificação do
DataFrame
- Argumentoascending
-
Ordem de ordenação - Argumento
na_position
Introduziremos o método pandas.DataFrame.sort_values
para ordenar os valores DataFrame
, e suas opções como ascending
para especificar a ordem de ordenação e na_position
que determina a posição de NaN
no resultado ordenado.
Considere o seguinte 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)
Se você executar este código, obterá a saída como segue, que ainda não está classificada.
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
Agora poderíamos ordenar o DataFrame
com os códigos abaixo.
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"]))
Classificamos o DataFrame
por col1
. Depois de executar o código acima, você obterá a seguinte saída.
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
Também podemos utilizar mais de uma coluna para ordenação. Vamos mudar a última linha dos códigos acima como a seguir,
print(df.sort_values(by=["col1", "col2"]))
Resultado:
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
Agora o DataFrame
também é classificado por col2
.
Ordem de classificação do DataFrame
- Argumento ascending
Por padrão, a ordenação está em ordem ascendente. Para ordenar DataFrame
em ordem decrescente, precisamos colocar a bandeira ascending=False
.
print(df.sort_values(by=["col1", "col2"], ascending=False))
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
Ordem de ordenação - Argumento na_position
A posição na_position
especifica a posição de NaN
após a classificação, ou seja, last
coloca NaN
no final. Seu valor padrão é first
que coloca NaN
no início do resultado ordenado.
Considere o seguinte 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"))
Depois de executar o código, obteremos a seguinte saída.
1 2.0
2 4.0
4 7.0
3 10.0
0 NaN