Trier par valeurs de colonne
Triez un DataFrame selon une ou plusieurs colonnes avec sort_values(), contrôlez l’ordre croissant ou décroissant et gérez le placement de NaN.
Trier par valeurs de colonne est une leçon Pandas & NumPy Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Pandas & NumPy Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Pandas & NumPy Academy comprend 4 leçons au total.
Pourquoi le tri est important
Le tri d’un DataFrame est important pour la présentation (rapports du top N, classements), la correction (les opérations sur les séries temporelles nécessitent un ordre chronologique) et les performances (la recherche binaire dans un index trié est en O(log n), contre O(n)). La méthode sort_values() de Pandas est l’outil principal pour trier selon le contenu des colonnes et renvoie un nouveau DataFrame sans modifier l’original.
import pandas as pd
df = pd.DataFrame({
'name': ['Dave', 'Alice', 'Carol', 'Bob'],
'score': [75, 92, 88, 65]
})
# Sort by score descending (highest first)
ranked = df.sort_values('score', ascending=False)
print(ranked)
# name score
# 1 Alice 92
# 2 Carol 88
# 0 Dave 75
# 3 Bob 65<code>sort_values()</code> — Utilisation de base
DataFrame.sort_values(by) trie les lignes selon les valeurs de la colonne spécifiée. L’argument by accepte le nom d’une seule colonne (chaîne) ou une liste de noms de colonnes pour effectuer un tri selon plusieurs clés. Par défaut, le tri est ascendant (de la plus petite valeur à la plus grande). Transmettez ascending=False pour obtenir un ordre descendant.
import pandas as pd
df = pd.DataFrame({
'product': ['B', 'A', 'C', 'A', 'B'],
'price': [20, 10, 30, 15, 25]
})
# Ascending by price (default)
print(df.sort_values('price'))
# product price
# 1 A 10
# 3 A 15
# 0 B 20
# 4 B 25
# 2 C 30Trier selon plusieurs colonnes
Le passage d’une liste de noms de colonnes à sort_values(by=) effectue le tri selon la première colonne, puis départage les égalités avec la deuxième colonne, et ainsi de suite. Le paramètre ascending peut également être une liste de booléens correspondant à l’ordre des colonnes, ce qui permet d’utiliser un sens de tri différent pour chaque clé.
import pandas as pd
df = pd.DataFrame({
'dept': ['HR', 'Eng', 'HR', 'Eng', 'Sales'],
'salary': [50000, 90000, 60000, 80000, 70000],
'name': ['Alice', 'Bob', 'Carol', 'Dave', 'Eve']
})
# Sort by dept A-Z, then by salary descending within each dept
sorted_df = df.sort_values(
by=['dept', 'salary'],
ascending=[True, False]
)
print(sorted_df)
# dept salary name
# 1 Eng 90000 Bob
# 3 Eng 80000 Dave
# 2 HR 60000 Carol
# 0 HR 50000 Alice
# 4 Sales 70000 EvePositionnement de NaN avec na_position
Par défaut, les valeurs NaN sont placées à la fin du résultat, quel que soit l’ordre ascendant ou descendant. Utilisez le paramètre na_position pour contrôler ce comportement : 'last' (valeur par défaut) ou 'first'. Le choix de la position de NaN est important dans les tableaux classés : les valeurs manquantes peuvent représenter une information « inconnue » et doivent être clairement séparées des entrées correctement classées.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Carol', 'Dave'],
'score': [92, np.nan, 88, np.nan]
})
# NaN last (default)
print(df.sort_values('score', ascending=False, na_position='last'))
# name score
# 0 Alice 92.0
# 2 Carol 88.0
# 1 Bob NaN
# 3 Dave NaN
# NaN first
print(df.sort_values('score', na_position='first').head(2))Tri stable et paramètre kind=
Pandas utilise par défaut un tri stable (mergesort, en O(n log n)) : lorsque deux lignes ont des valeurs égales pour la clé de tri, leur ordre relatif d’origine est conservé. Cette stabilité est importante lorsque vous triez d’abord selon une clé principale, puis selon une clé secondaire : l’ordre du tri principal est maintenu parmi les égalités de la clé secondaire. Vous pouvez modifier l’algorithme avec kind='quicksort' (plus rapide, mais instable) ou kind='heapsort'.
import pandas as pd
df = pd.DataFrame({
'group': ['A', 'B', 'A', 'B'],
'value': [10, 10, 20, 20],
'original_row': [0, 1, 2, 3]
})
# Stable sort: equal values keep original relative order
result = df.sort_values('value', kind='mergesort')
print(result)
# group value original_row
# 0 A 10 0
# 1 B 10 1 <- row 0 before row 1 (stable)
# 2 A 20 2
# 3 B 20 3inplace=True ou réaffectation
Comme la plupart des méthodes de Pandas, sort_values() renvoie par défaut un nouveau DataFrame. Le passage de inplace=True modifie le DataFrame sur place et renvoie None. L’utilisation de inplace est généralement déconseillée dans les versions modernes de Pandas, car elle rend le code plus difficile à intégrer dans une chaîne de traitement et à déboguer — il est plus simple de toujours réaffecter le résultat : df = df.sort_values('col').
import pandas as pd
df = pd.DataFrame({'x': [3, 1, 4, 1, 5]})
# Preferred: reassign
df = df.sort_values('x')
print(df['x'].tolist()) # [1, 1, 3, 4, 5]
# Alternative: inplace (not recommended for pipelines)
df2 = pd.DataFrame({'x': [3, 1, 4]})
df2.sort_values('x', inplace=True)
print(df2['x'].tolist()) # [1, 3, 4]Réinitialiser l’index après le tri
Après un tri, l’index des lignes reflète les positions d’origine. Dans un tableau trié par ordre descendant, la ligne 0 peut désormais avoir l’index 4. Appelez .reset_index(drop=True) pour réattribuer des index séquentiels commençant à 0. Cette opération est importante avant d’utiliser .iloc[0] pour obtenir de manière fiable la ligne classée première, ou avant d’exporter vers un fichier dans lequel des intervalles manquants dans les index pourraient sembler déroutants.
import pandas as pd
df = pd.DataFrame({'score': [70, 90, 80]})
sorted_df = df.sort_values('score', ascending=False)
print(sorted_df)
# score
# 1 90
# 2 80
# 0 70
# Clean sequential index
reset_df = sorted_df.reset_index(drop=True)
print(reset_df)
# score
# 0 90
# 1 80
# 2 70Obtenir le top N avec nlargest() et nsmallest()
Pour sélectionner les N premières ou les N dernières lignes selon la valeur d’une colonne, df.nlargest(n, 'col') et df.nsmallest(n, 'col') sont plus efficaces que de trier l’ensemble du DataFrame puis d’en extraire une tranche. Ces méthodes utilisent un tri partiel (sélection par tas) en O(n log k), plutôt qu’en O(n log n), ce qui est important pour les grands DataFrames.
import pandas as pd
df = pd.DataFrame({
'product': ['A', 'B', 'C', 'D', 'E'],
'revenue': [5000, 12000, 8000, 3000, 15000]
})
# Top 3 by revenue
top3 = df.nlargest(3, 'revenue')
print(top3)
# product revenue
# 4 E 15000
# 1 B 12000
# 2 C 8000
# Bottom 2 by revenue
bottom2 = df.nsmallest(2, 'revenue')
print(bottom2)Trier les colonnes catégorielles selon l’ordre des catégories
Lors du tri d’une colonne contenant un type Categorical ordonné, sort_values() respecte l’ordre des catégories plutôt que l’ordre alphabétique. Cela est essentiel pour ordonner correctement des niveaux de priorité, des degrés de gravité ou des libellés de taille : 'Small' doit précéder 'Medium', qui doit lui-même précéder 'Large', et non suivre l’ordre alphabétique dans lequel 'Large' apparaît en premier.
import pandas as pd
df = pd.DataFrame({
'size': pd.Categorical(
['Large', 'Small', 'Medium', 'Small', 'Large'],
categories=['Small', 'Medium', 'Large'],
ordered=True
),
'count': [10, 5, 8, 3, 7]
})
print(df.sort_values('size'))
# size count
# 1 Small 5
# 3 Small 3
# 2 Medium 8
# 0 Large 10
# 4 Large 7Enchaîner le tri avec d’autres opérations
Comme sort_values() renvoie un DataFrame, cette méthode s’intègre naturellement aux chaînes de méthodes. Un schéma courant consiste à filtrer les lignes → agréger → trier → afficher le top N. L’enchaînement conserve une chaîne de traitement linéaire et lisible.
import pandas as pd
df = pd.DataFrame({
'dept': ['Eng', 'HR', 'Eng', 'Sales', 'HR', 'Eng'],
'salary': [90000, 50000, 120000, 70000, 55000, 80000]
})
result = (
df
.groupby('dept')['salary'].mean()
.reset_index()
.sort_values('salary', ascending=False)
.head(2)
)
print(result)
# dept salary
# 0 Eng 96666.67
# 2 Sales 70000.00Mise en pratique : rapport des 5 meilleurs produits
Voici un exemple pratique de bout en bout pour produire un rapport des 5 produits les plus performants selon le chiffre d’affaires : charger les données, calculer le chiffre d’affaires total par produit, trier par ordre descendant, conserver les 5 premiers, réinitialiser l’index pour obtenir un numéro de classement propre et ajouter une colonne de classement pour l’affichage.
import pandas as pd
orders = pd.DataFrame({
'product': ['A', 'B', 'A', 'C', 'B', 'D', 'E', 'A', 'C', 'E'],
'revenue': [100, 200, 150, 80, 300, 60, 400, 120, 90, 350]
})
top5 = (
orders
.groupby('product')['revenue'].sum()
.reset_index()
.sort_values('revenue', ascending=False)
.head(5)
.reset_index(drop=True)
)
top5.index = top5.index + 1 # rank from 1
top5.index.name = 'rank'
print(top5)Vérification rapide
Évaluez votre compréhension du tri des DataFrames selon les valeurs des colonnes.
Récapitulatif de la leçon
Dans cette leçon, vous avez appris que sort_values(by=) trie selon une ou plusieurs colonnes, que ascending= peut être une liste pour appliquer un sens différent à chaque clé, que na_position='last' contrôle le positionnement de NaN, et que nlargest()/nsmallest() extraient efficacement les N premières ou dernières lignes sans trier l’ensemble du DataFrame. Utilisez toujours reset_index() après un tri pour obtenir un résultat séquentiel propre. Ensuite, vous apprendrez à trier selon l’index du DataFrame.
Apprends Python avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 30
- Leçons
- 120
Questions Fréquemment Posées
La leçon « Trier par valeurs de colonne » est-elle gratuite ?
Oui — le texte complet de « Trier par valeurs de colonne » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Pandas & NumPy Academy, passe à CoddyKit PRO. Le cours Pandas & NumPy Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Trier par valeurs de colonne » ?
Triez un DataFrame selon une ou plusieurs colonnes avec sort_values(), contrôlez l’ordre croissant ou décroissant et gérez le placement de NaN. Tu pratiques Pandas & NumPy Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Pandas & NumPy Academy ?
Aucune expérience préalable n'est requise. Pandas & NumPy Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Trier par valeurs de colonne » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Pandas & NumPy Academy ?
Oui. Chaque leçon Pandas & NumPy Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Trier par valeurs de colonne
- Trier par index
- Classer les valeurs
- Définir et réinitialiser l’index