Exercice 67 / 100

Pandas — Tri & Ranking

Trie un DataFrame et crée des classements

Trier un DataFrame et créer des classements (ranks) sont deux opérations très courantes en analyse de données.

Trier les lignes : sort_values

df.sort_values('score') # croissant df.sort_values('score', ascending=False) # décroissant df.sort_values(['dept', 'salaire']) # multi-clés (priorité gauche → droite) df.sort_values(['dept', 'salaire'], ascending=[True, False]) df.sort_values('col', na_position='first') # mettre les NaN en haut

Le DataFrame original n'est pas modifié par défaut. Pour réassigner :

df = df.sort_values('score') ou df.sort_values('score', inplace=True)

Après sort_values, l'index reste celui d'origine (peut être en désordre). reset_index(drop=True) pour le réinitialiser.

Trier par index : sort_index

df.sort_index() par index croissant df.sort_index(axis=1) tri les COLONNES par nom

Créer un classement : rank

Attribue un rang à chaque valeur (1 = plus petit par défaut) :

df['rang'] = df['score'].rank() df['rang'] = df['score'].rank(ascending=False) # 1 = plus grand df['rang'] = df['score'].rank(method='dense') # pas de saut en cas d'ex-aequo

Méthodes pour gérer les ex-aequo :

'average' (défaut) moyenne des positions 'min' rang du premier (1, 1, 3) 'dense' sans trou (1, 1, 2)

N plus grandes / petites valeurs : nlargest / nsmallest

Plus rapide que sort + head :

df.nlargest(3, 'score') df.nsmallest(5, 'salaire')
Trier ne mesure pas : sort_values ne retient que l'ordre des valeurs, et nlargest(3) coupe après le troisième rang sans regarder l'écart entre les scores

Exemple complet

df = pd.DataFrame({ 'joueur': ['Alice', 'Bob', 'Charlie', 'Diana'], 'score': [150, 200, 180, 220] })
df.sort_values('score', ascending=False) df['rang'] = df['score'].rank(ascending=False).astype(int) print(df.sort_values('rang'))

Pour un classement "compétition" (1, 2, 2, 4), utilise method='min'. Pour un classement "dense" (1, 2, 2, 3), method='dense'.

exercise.py

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →