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

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

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Dev, Python and tagged , , , , .