Pandas & NumPy Academy · Leçon

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.

Leçon 1 sur 413 étapes

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     30

Trier 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    Eve

Positionnement 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             3

inplace=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     70

Obtenir 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      7

Enchaî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.00

Mise 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.

Gratuit pour commencer

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

  1. Trier par valeurs de colonne
  2. Trier par index
  3. Classer les valeurs
  4. Définir et réinitialiser l’index
← Retour à Pandas & NumPy Academy