Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida em sort_values()

A ordem que coloca no parâmetro "by" importa?

1 resposta
solução!

Boas André!! Tudo bem? Espero que sim! A ordem dos parâmetros importa sim! Vou demonstrar! Primeiro vamos importar uma base de dados e realizar o sort com os valores. Eu gosto muito de Pokemon, então a base de dados que vou usar é uma pokedex disponível no GitHub. Dessa forma, não precisaremos baixar nenhum arquivo para trabalhar com os dados. Primeiramente, vamos importas o pandas:

import pandas as pd

Agora, vamos importar a base de dados:

dados = pd.read_csv('https://gist.githubusercontent.com/armgilles/194bcff35001e7eb53a2a8b441e8b2c6/raw/92200bc0a673d5ce2110aaad4544ed6c4010f687/pokemon.csv')

Se olharmos para os dados nesse momento, eles estão ordenados pelo número do pokemon na pokedex:

    #    Name    Type 1    Type 2    Total    HP    Attack    Defense    Sp. Atk    Sp. Def    Speed    Generation    Legendary
0    1    Bulbasaur    Grass    Poison    318    45    49    49    65    65    45    1    False
1    2    Ivysaur    Grass    Poison    405    60    62    63    80    80    60    1    False
2    3    Venusaur    Grass    Poison    525    80    82    83    100    100    80    1    False
3    3    VenusaurMega Venusaur    Grass    Poison    625    80    100    123    122    120    80    1    False
4    4    Charmander    Fire    NaN    309    39    52    43    60    50    65    1    False

Agora, vamos fazer dois o sort de duas maneiras a partir das colunas HP, e Generation, em ordens difrerentes para ver a diferença entre os dataframes:

dados1 = dados.sort_values(by=['HP', 'Generation'])

Para facilitar a visualização, vamos printar apenas o index, nome do Pokemon, HP e a geração:

#estou usando o collab, então não preciso colocar essa expressão em um print
dados1[['Name', 'HP', 'Generation']].head()

Que resulta em:

            Name    HP    Generation
    316    Shedinja    1    3    
    55     Diglett    10    1    
    139    Magikarp   20    1    
    186    Pichu      20    2    
    230    Shuckle    20    2    

E agora vamos fazer o mesmo, invertendo os valores no by:

dados2 = dados.sort_values(by=['Generation', 'HP'])

E a visualização:

dados2[['Name', 'HP', 'Generation']].head()

Que resulta em:

                Name    HP    Generation
    55        Diglett     10    1
    139       Magikarp    20    1
    68        Abra        25    1
    88        Magnemite   25    1
    24        Rattata     30    1

Perceba que dados1 e dados2 são diferentes, pois a ordem que inserimos no by altera a forma com que o DataFrame é ordenado.

Espero ter ajudado! Bons estudos!