Ordenando um DataFrame por múltiplas colunas. (#python #pandas #jupyter #dev #data)
Overview
Dando continuidade ao aprendizado com Pandas, nosso próximo passo é dominar a arte de ordenar DataFrames por múltiplas colunas. Se você pensa em manipular seus dados como um verdadeiro maestro, este post é a partitura que faltava. Vamos desde a importação dos dados até a aplicação de ordenações crescentes, decrescentes e mistas, tudo isso com exemplos claros e a praticidade que somente um Jupyter notebook pode oferecer. Venha conosco desvendar mais este mistério dos DataFrames!
Seguindo o tema do último post, neste mostro como fazer a ordenação de um DataFrame por múltiplas colunas.
Assim como no último post, vamos carregar os dados de um dataset que está no meu repositório e mostrar os primeiros registros dele:
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/brenordv/data-samples/main/csv/NASA/missionstars.csv", comment="#")
df.head()
Colocando os dados em ordem crescente
df.sort_values(["star_name", "hd_name", "tm_name"])
No código acima, colocamos as linhas do DataFrame em ordem crescente, com base nas colunas star_name, hd_name e tm_name. O que define se a ordenação será de forma crescente ou decrescente é o parâmetro ascending, que recebe o valor True por padrão, por isso podemos omiti-lo e o DataFrame ainda será ordenado desta forma.
Você pode explicita-lo da seguinte forma:
df.sort_values(["star_name", "hd_name", "tm_name"], ascending=True)
Colocando os dados em ordem decrescente
A dica de como fazer esta ordenação está no último exemplo. Vamos lá:
df.sort_values(["star_name", "hd_name", "tm_name"], ascending=False)
De forma similar ao exemplo anterior, colocamos as linhas do DataFrame em ordem decrescente, com base nas colunas star_name, hd_name e tm_name.
A terceira opção é fazer uma ordenação “mista”.
Fazendo uma ordenação mista
df.sort_values(
["star_name", "hd_name", "tm_name"],
ascending=[
False, # star_name
True, # hd_name
False # tm_name
])
No código acima, passo uma uma lista de colunas no primeiro argumento e uma lista de booleanos para o argumento ascending. Nessa segunda lista, a posição de cada booleano corresponde a posição da coluna na primeira lista e o valor segue a lógica do que vimos nos exemplos acima (True para crescente e False para decrescente).
Assim como no último post, criei um Jupyter notebook com este exemplo: https://github.com/brenordv/demo-pandas-jupyter/blob/master/pd_sort_multi_columns.ipynb
Este post foi bem simples, mas espero ter ajudado. 🙂