Ordina Pandas DataFrame in base ai valori di una colonna
-
Ordine di ordinamento
DataFrame
- Argomentoascending
-
Ordine di ordinamento
DataFrame
- Argomentona_position
Introdurremo il metodo pandas.DataFrame.sort_values
per ordinare i valori di DataFrame
e le sue opzioni come ascending
per specificare l’ordinamento e na_position
che determina la posizione di NaN
nel risultato ordinato.
Considera il seguente DataFrame
,
import pandas as pd
df = pd.DataFrame(
{
"col1": ["g", "t", "n", "w", "n", "g"],
"col2": [5, 2, 5, 1, 3, 6],
"col3": [0, 7, 2, 8, 1, 2],
}
)
print(df)
Se esegui questo codice, otterrai l’output come segue che non è ancora ordinato.
col1 col2 col3
0 g 5 0
1 t 2 7
2 n 5 2
3 w 1 8
4 n 3 1
5 g 6 2
Ora potremmo ordinare il DataFrame
con i codici sottostanti.
import pandas as pd
df = pd.DataFrame(
{
"col1": ["g", "t", "n", "w", "n", "g"],
"col2": [5, 2, 5, 1, 3, 6],
"col3": [0, 7, 2, 8, 1, 2],
}
)
print(df.sort_values(by=["col1"]))
Ordiniamo DataFrame
per col1
. Dopo aver eseguito il codice sopra, otterrai il seguente output.
col1 col2 col3
0 g 5 0
5 g 6 2
2 n 5 2
4 n 3 1
1 t 2 7
3 w 1 8
Possiamo anche usare più di una colonna per l’ordinamento. Cambiamo l’ultima riga dei codici sopra come segue,
print(df.sort_values(by=["col1", "col2"]))
Produzione:
col1 col2 col3
0 g 5 0
5 g 6 2
4 n 3 1
2 n 5 2
1 t 2 7
3 w 1 8
Ora DataFrame
è ulteriormente ordinato anche da col2
.
Ordine di ordinamento DataFrame
- Argomento ascending
Per impostazione predefinita, l’ordinamento è in ordine crescente. Per ordinare DataFrame
in ordine decrescente, dobbiamo impostare il flag ascending=False
.
print(df.sort_values(by=["col1", "col2"], ascending=False))
Produzione:
col1 col2 col3
3 w 1 8
1 t 2 7
2 n 5 2
4 n 3 1
5 g 6 2
0 g 5 0
Ordine di ordinamento DataFrame
- Argomento na_position
na_position
specifica la posizione di NaN
dopo l’ordinamento, cioè last
mette NaN
alla fine. Il suo valore predefinito è first
che mette NaN
all’inizio del risultato ordinato.
Considera il seguente DataFrame
,
import numpy as np
import pandas as pd
s = pd.Series([np.nan, 2, 4, 10, 7])
print(s.sort_values(na_position="last"))
Dopo aver eseguito il codice, otterremo il seguente output.
1 2.0
2 4.0
4 7.0
3 10.0
0 NaN