Ordenando um DataFrame por múltiplas colunas. (#python #pandas #jupyter #dev #data)

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. 🙂