Vai al contenuto principale

Pandas Sort Values: guida completa

Usa sort_values() per riordinare le righe in base ai valori di colonna. Applica sort_index() per riordinare le righe in base all’indice del DataFrame. Combina entrambi i metodi per esplorare i dati da diverse angolazioni.
· 4 min leggi

Scopri con l'IA

Trovare informazioni interessanti in un DataFrame è spesso più semplice se cambi l’ordine delle righe. Puoi ordinare le righe passando il nome di una colonna a .sort_values().

Nei casi in cui le righe abbiano lo stesso valore (cosa comune se ordini per una variabile categorica), potresti voler risolvere i pareggi ordinando su un’altra colonna. Puoi ordinare su più colonne passando un elenco di nomi di colonna.

Esempio di ordinamento colonne in Pandas

Ordinare le righe per valori di colonna con sort_values()

Puoi cambiare l’ordine delle righe ordinandole in modo che i dati più interessanti siano in cima al DataFrame.

Ordina per una singola colonna

Ad esempio, quando applichiamo sort_values() alla colonna weight_kg del DataFrame dogs, otteniamo il cane più leggero in cima, Stella il Chihuahua, e il più pesante in fondo, Bernie il San Bernardo.

dogs.sort_values("weight_kg")
      name        breed  color  height_cm  weight_kg date_of_birth
5   Stella    Chihuahua    Tan         18          2    2015-04-20
3   Cooper    Schnauzer   Gray         49         17    2011-12-11
0    Bella     Labrador  Brown         56         24    2013-07-01
1  Charlie       Poodle  Black         43         24    2016-09-16
2     Lucy    Chow Chow  Brown         46         24    2014-08-25
4      Max     Labrador  Black         59         29    2017-01-20
6   Bernie  St. Bernard  White         77         74    2018-02-27

Impostando l’argomento ascending a False ordinerai i dati nell’altro verso, dal cane più pesante al più leggero.

dogs.sort_values("weight_kg", ascending=False)
      name        breed  color  height_cm  weight_kg date_of_birth
6   Bernie  St. Bernard  White         77         74    2018-02-27
4      Max     Labrador  Black         59         29    2017-01-20
0    Bella     Labrador  Brown         56         24    2013-07-01
1  Charlie       Poodle  Black         43         24    2016-09-16
2     Lucy    Chow Chow  Brown         46         24    2014-08-25
3   Cooper    Schnauzer   Gray         49         17    2011-12-11
5   Stella    Chihuahua    Tan         18          2    2015-04-20

Ordina per più colonne

Possiamo ordinare per più variabili passando un elenco di nomi di colonna a sort_values. Qui ordiniamo prima per peso, poi per altezza. Ora Charlie, Lucy e Bella sono ordinati dal più basso al più alto, anche se pesano tutti uguale.

dogs.sort_values(["weight_kg", "height_cm"])
      name        breed  color  height_cm  weight_kg date_of_birth
5   Stella    Chihuahua    Tan         18          2    2015-04-20
3   Cooper    Schnauzer   Gray         49         17    2011-12-11
1  Charlie       Poodle  Black         43         24    2016-09-16
2     Lucy    Chow Chow  Brown         46         24    2014-08-25
0    Bella     Labrador  Brown         56         24    2013-07-01
4      Max     Labrador  Black         59         29    2017-01-20
6   Bernie  St. Bernard  White         77         74    2018-02-27

Per cambiare il verso dell’ordinamento dei valori, passa una lista all’argomento ascending per specificare in che direzione ordinare ciascuna variabile. Ora Charlie, Lucy e Bella sono ordinati dal più alto al più basso.

dogs.sort_values(["weight_kg", "height_cm"], ascending=[True, False])
      name        breed  color  height_cm  weight_kg date_of_birth
5   Stella    Chihuahua    Tan         18          2    2015-04-20
3   Cooper    Schnauzer   Gray         49         17    2011-12-11
0    Bella     Labrador  Brown         56         24    2013-07-01
2     Lucy    Chow Chow  Brown         46         24    2014-08-25
1  Charlie       Poodle  Black         43         24    2016-09-16
4      Max     Labrador  Black         59         29    2017-01-20
6   Bernie  St. Bernard  White         77         74    2018-02-27

Ordinare per indice di riga con sort_index()

A volte potresti voler riordinare le righe in base alle loro etichette (cioè all’indice del DataFrame) invece che a specifiche colonne. In tal caso, puoi usare il metodo sort_index() al posto di sort_values(). Ricorda che, per impostazione predefinita, sort_index() ordina le righe in ordine crescente in base al loro indice:

# Ordina le righe per indice (crescente)
dogs_sorted = dogs.sort_index()
print(dogs_sorted)

Se hai bisogno di ordinare le righe in ordine decrescente, passa semplicemente ascending=False:

# Ordina le righe per indice (decrescente)
dogs_sorted_desc = dogs.sort_index(ascending=False)
print(dogs_sorted_desc)

Allo stesso modo, se hai un indice multilivello (gerarchico), sort_index() può gestirlo ordinando più livelli. Ti basta passare un elenco ai parametri level o ascending (proprio come prima abbiamo passato un elenco a sort_values()):

# Ordina le righe per più livelli di un indice multilivello
dogs_sorted_multi = dogs.sort_index(level=[0, 1], ascending=[True, False])
print(dogs_sorted_multi)

Esempio interattivo di Pandas Sort Values

Nel seguente esempio, ordinerai homelessness per numero di individui senza dimora, dal più piccolo al più grande, e salverai il risultato come homelessness_ind. Infine, stamperai la testa del DataFrame ordinato.

# Ordina homelessness per individuals
homelessness_ind = homelessness.sort_values("individuals")

# Stampa le prime righe
print(homelessness_ind.head())

Eseguendo il codice qui sopra, si ottiene il seguente risultato:

                region         state  individuals  family_members  state_pop
50            Mountain       Wyoming        434.0           205.0     577601
34  West North Central  North Dakota        467.0            75.0     758080
7       South Atlantic      Delaware        708.0           374.0     965479
39         New England  Rhode Island        747.0           354.0    1058287
45         New England       Vermont        780.0           511.0     624358

Provalo tu stesso.

Per saperne di più sull’ordinamento e il subset dei dati, guarda questo video dal nostro corso Data Manipulation with pandas.

Questo contenuto è tratto dal corso Data Manipulation with pandas di Maggie Matsui e Richie Cotton su DataCamp.

Approfondimenti

In questo articolo abbiamo visto, tra le altre cose, quando usare sort_index() vs. sort_values(): usa sort_values() quando vuoi riordinare le righe in base ai valori delle colonne; usa sort_index() quando vuoi riordinare le righe in base alle etichette di riga (l’indice del DataFrame).

Abbiamo molti altri utili tutorial su pandas per continuare a imparare, incluso The Ultimate Guide to Pandas for Beginners, così puoi fare pratica. Abbiamo anche altre guide pratiche specifiche per problemi comuni, tra cui How to Import CSV Data into Pandas e How to Join DataFrames in Pandas. Inoltre, ricorda di seguire il nostro percorso di competenze Python Programming per continuare a migliorare. 

Argomenti

Correlato