GroupBy avec une ou plusieurs clés
Regroupez selon une ou plusieurs colonnes avec groupby() et appliquez les agrégations sum, mean, count et min/max.
GroupBy avec une ou plusieurs clés est une leçon Pandas & NumPy Academy gratuite sur CoddyKit. Ceci est la leçon 2 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.
GroupBy avec une seule clé
L’appel GroupBy le plus simple utilise une seule colonne comme clé de regroupement. Vous appelez df.groupby('column_name'), puis enchaînez une agrégation. Pandas crée un groupe pour chaque valeur unique de cette colonne et applique l’agrégation à chaque colonne numérique, ou à la colonne sélectionnée. Il s’agit de la forme de GroupBy la plus courante dans l’analyse quotidienne.
import pandas as pd
df = pd.DataFrame({
'dept': ['Eng', 'HR', 'Eng', 'HR', 'Eng'],
'salary': [90000, 60000, 95000, 62000, 88000],
'years': [3, 5, 7, 2, 4]
})
print(df.groupby('dept')['salary'].mean())
# dept
# Eng 91000.0
# HR 61000.0Choisir les colonnes à agréger
Après avoir appelé groupby(), vous pouvez sélectionner une colonne avec la notation entre crochets pour obtenir une SeriesGroupBy, ou sélectionner plusieurs colonnes avec une liste pour obtenir une DataFrameGroupBy. Si vous omettez entièrement la sélection, Pandas agrège toutes les colonnes numériques. C’est pratique, mais cela peut produire des résultats inattendus si certaines colonnes numériques ne sont pas pertinentes.
# Single column result -> SeriesGroupBy
print(df.groupby('dept')['salary'].sum())
# Multiple columns result -> DataFrameGroupBy
print(df.groupby('dept')[['salary', 'years']].mean())
# salary years
# dept
# Eng 91000.0 4.667
# HR 61000.0 3.500Toutes les agrégations courantes
Pandas prend en charge un ensemble complet de méthodes d’agrégation intégrées sur les objets GroupBy : sum(), mean(), median(), min(), max(), count(), std(), var(), first() et last(). Chacune renvoie un scalaire par groupe, ce qui fournit une table récapitulative claire indexée par la clé de regroupement.
g = df.groupby('dept')['salary']
print('sum: ', g.sum())
print('mean: ', g.mean())
print('min: ', g.min())
print('max: ', g.max())
print('count: ', g.count())
print('std: ', g.std().round(2))GroupBy avec plusieurs clés
Transmettez une liste de noms de colonnes à groupby() pour effectuer un regroupement selon plusieurs dimensions à la fois. Chaque combinaison unique de valeurs dans ces colonnes devient son propre groupe. Le résultat possède un MultiIndex avec un niveau par colonne de regroupement, ce qui vous permet d’examiner en une seule étape des récapitulatifs croisant plusieurs dimensions.
df2 = pd.DataFrame({
'dept': ['Eng', 'Eng', 'HR', 'HR', 'Eng', 'HR'],
'level': ['L1', 'L2', 'L1', 'L2', 'L1', 'L1'],
'salary': [80000, 100000, 55000, 70000, 82000, 58000]
})
result = df2.groupby(['dept', 'level'])['salary'].mean()
print(result)
# dept level
# Eng L1 81000.0
# L2 100000.0
# HR L1 56500.0
# L2 70000.0Accéder aux résultats MultiIndex
Lorsque vous regroupez les données selon plusieurs clés, l’index du résultat est un MultiIndex. Vous pouvez accéder à un niveau externe précis avec .loc['value'] et parcourir les niveaux internes avec des tuples. L’appel de reset_index() transforme le MultiIndex en colonnes ordinaires, ce qui est souvent plus pratique pour les opérations suivantes ou pour l’exportation.
result = df2.groupby(['dept', 'level'])['salary'].mean()
# Access Engineering rows only
print(result.loc['Eng'])
# level
# L1 81000.0
# L2 100000.0
# Flatten to a regular DataFrame
print(result.reset_index())
# dept level salary
# 0 Eng L1 81000.0
# 1 Eng L2 100000.0Utiliser as_index=False
Par défaut, les colonnes de regroupement deviennent l’index du résultat. Le passage de as_index=False les conserve plutôt comme des colonnes ordinaires, ce qui vous donne un DataFrame à structure plate, plus facile à transmettre aux opérations Pandas suivantes ou à exporter. Cela revient à appeler reset_index() sur le résultat.
flat = df2.groupby(['dept', 'level'], as_index=False)['salary'].mean()
print(flat)
# dept level salary
# 0 Eng L1 81000.0
# 1 Eng L2 100000.0
# 2 HR L1 56500.0
# 3 HR L2 70000.0Compter les lignes par groupe
count() renvoie le nombre de valeurs non nulles dans chaque groupe. Si vous souhaitez obtenir le nombre total de lignes par groupe, quelles que soient les valeurs nulles, utilisez plutôt size(). Cette distinction est importante lorsque vos données contiennent des valeurs manquantes, car count() sous-estimera le nombre de lignes des groupes contenant des entrées NaN.
import numpy as np
df3 = pd.DataFrame({
'dept': ['Eng', 'Eng', 'HR', 'HR'],
'bonus': [5000, np.nan, 3000, 4000]
})
print(df3.groupby('dept')['bonus'].count()) # ignores NaN
# dept
# Eng 1
# HR 2
print(df3.groupby('dept')['bonus'].size()) # includes NaN rows
# dept
# Eng 2
# HR 2Trier les résultats de GroupBy
Par défaut, GroupBy trie le résultat selon la clé de groupe. Vous pouvez désactiver le tri avec sort=False afin de conserver l’ordre d’apparition initiale, ce qui est légèrement plus rapide pour les grands ensembles de données. Une fois le résultat obtenu sous forme de DataFrame, vous pouvez le trier davantage avec sort_values() sur n’importe quelle colonne.
result = (df.groupby('dept', sort=False)['salary']
.mean()
.reset_index()
.sort_values('salary', ascending=False))
print(result)
# dept salary
# 0 Eng 91000.0
# 1 HR 61000.0Enchaîner GroupBy avec d’autres méthodes
Les résultats de GroupBy sont des Series ou des DataFrames ordinaires : vous pouvez donc leur appliquer immédiatement d’autres méthodes Pandas. Un modèle courant consiste à agréger, puis à appeler reset_index(), à renommer les colonnes, puis à appeler sort_values(), le tout dans une seule chaîne de méthodes lisible, sans stocker de variables intermédiaires.
summary = (
df
.groupby('dept')['salary']
.agg(['mean', 'count'])
.rename(columns={'mean': 'avg_salary', 'count': 'headcount'})
.reset_index()
.sort_values('avg_salary', ascending=False)
)
print(summary)Appliquer sum, mean et count ensemble
Vous avez souvent besoin de plusieurs statistiques par groupe. Transmettez une liste de noms de fonctions à .agg() pour les calculer simultanément. Le résultat est un DataFrame avec une colonne par fonction. Cette approche est plus efficace que l’appel séparé de chaque agrégation, car Pandas les traite toutes en un seul passage sur les données.
result = df.groupby('dept')['salary'].agg(['sum', 'mean', 'count', 'max'])
print(result)
# sum mean count max
# dept
# Eng 273000 91000.0 3 95000
# HR 122000 61000.0 2 62000Regrouper selon des colonnes catégorielles
Lorsqu’une colonne de regroupement possède le type Categorical, Pandas inclut par défaut toutes les catégories dans le résultat, y compris celles qui ne contiennent aucune ligne. Cela peut être utile pour garantir que votre table récapitulative affiche toujours chaque catégorie, mais crée des lignes contenant NaN ou 0 pour les groupes vides. Contrôlez ce comportement avec le paramètre observed — définissez-le sur True pour ignorer les catégories vides.
df['dept'] = df['dept'].astype('category')
# With observed=True, only groups that appear in data are included
print(df.groupby('dept', observed=True)['salary'].mean())
# dept
# Eng 91000.0
# HR 61000.0Vérification rapide
Testez votre compréhension de GroupBy avec une ou plusieurs clés, comme présenté dans cette leçon.
Récapitulatif de la leçon
Dans cette leçon, vous avez appris à regrouper les données selon une seule colonne et à appliquer des agrégations courantes, à regrouper les données selon plusieurs colonnes pour produire des récapitulatifs croisant plusieurs dimensions, ainsi qu’à distinguer count() et size() lorsque des valeurs nulles sont présentes. Nous allons maintenant étudier la puissante méthode agg(), qui permet de calculer plusieurs statistiques différentes en un seul appel.
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 « GroupBy avec une ou plusieurs clés » est-elle gratuite ?
Oui — le texte complet de « GroupBy avec une ou plusieurs clés » 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 « GroupBy avec une ou plusieurs clés » ?
Regroupez selon une ou plusieurs colonnes avec groupby() et appliquez les agrégations sum, mean, count et min/max. 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 2 sur 4.
Combien de temps prend la leçon « GroupBy avec une ou plusieurs clés » ?
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
- Le schéma diviser-appliquer-combiner
- GroupBy avec une ou plusieurs clés
- La méthode agg()
- Transformation et filtrage avec GroupBy