Pandas : trier le DataFrame par index et par colonne
Vous pouvez utiliser la syntaxe suivante pour trier un DataFrame pandas par index et par colonne :
df = df.sort_values(by = ['column_name', 'index'], ascending = [False, True])
Les exemples suivants montrent comment utiliser cette syntaxe dans la pratique.
Exemples : trier le DataFrame par index et par colonne
Le code suivant montre comment trier un DataFrame pandas par la colonne nommée points puis par la colonne d’index :
import pandas as pd #create DataFrame df = pd.DataFrame({'id': [1, 2, 3, 4, 5, 6, 7, 8], 'points': [25, 15, 15, 14, 20, 20, 25, 29], 'assists': [5, 7, 7, 9, 12, 9, 9, 4], 'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]}).set_index('id') #view first few rows df.head() points assists rebounds id 1 25 5 11 2 15 7 8 3 15 7 10 4 14 9 6 5 20 12 6 #sort by points and then by index df.sort_values(by = ['points', 'id'], ascending = [False, True]) points assists rebounds id 8 29 4 12 1 25 5 11 7 25 9 9 5 20 12 6 6 20 9 5 2 15 7 8 3 15 7 10 4 14 9 6
Le DataFrame résultant est trié par points par ordre décroissant puis par index par ordre croissant (s’il y a deux joueurs qui marquent le même nombre de points).
Notez que si nous n’utilisons pas l’argument ascendant , alors chaque colonne utilisera l’ordre croissant comme méthode de tri par défaut :
#sort by points and then by index df.sort_values(by = ['points', 'id']) points assists rebounds id 4 14 9 6 2 15 7 8 3 15 7 10 5 20 12 6 6 20 9 5 1 25 5 11 7 25 9 9 8 29 4 12
Si la colonne d’index n’est actuellement pas nommée, vous pouvez la renommer puis la trier en conséquence :
#sort by points and then by index df.rename_axis('index').sort_values(by = ['points', 'id']) points assists rebounds id 4 14 9 6 2 15 7 8 3 15 7 10 5 20 12 6 6 20 9 5 1 25 5 11 7 25 9 9 8 29 4 12
Ressources additionnelles
Pandas : comment trier les colonnes par nom
Pandas : trier le DataFrame par date
Pandas : Comment supprimer les lignes en double