Exercice 67 / 100

Pandas — Tri & Ranking

ConsigneTrie un DataFrame et crée des classements

📖 Cours

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') # croissantdf.sort_values('score', ascending=False) # décroissantdf.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 croissantdf.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 granddf['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
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'.

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