0Pricing
Pandas & NumPy Academy · Leçon

La méthode agg()

Appliquez plusieurs fonctions d’agrégation simultanément avec agg() et transmettez un dictionnaire pour calculer des statistiques différentes selon les colonnes.

La méthode agg() est une leçon Pandas & NumPy Academy gratuite sur CoddyKit. Ceci est la leçon 3 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 utiliser agg() ?

Appeler directement sum() ou mean() sur un objet GroupBy vous fournit une seule statistique. Or, les analyses réelles nécessitent souvent plusieurs statistiques à la fois, par exemple le chiffre d’affaires total, la taille moyenne des commandes et le nombre de commandes par région. La méthode agg() — abréviation de aggregate — vous permet de calculer toutes ces valeurs en un seul appel efficace, au lieu d’exécuter des agrégations séparées et de fusionner les résultats.

Transmettre une liste de noms de fonctions

L’utilisation la plus simple de agg() consiste à transmettre une liste de chaînes contenant des noms de fonctions. Pandas applique chaque fonction à la colonne sélectionnée et renvoie un DataFrame dans lequel chaque colonne correspond à une fonction. Cette approche fonctionne avec n’importe quel nom d’agrégation intégré : 'sum', 'mean', 'min', 'max', 'count', 'std', 'median', et bien d’autres.

import pandas as pd

df = pd.DataFrame({
    'region': ['East', 'West', 'East', 'West', 'East', 'West'],
    'revenue': [200, 340, 150, 290, 310, 410],
    'units':   [20,   35,  15,  30,  28,  40]
})

result = df.groupby('region')['revenue'].agg(['sum', 'mean', 'count', 'max'])
print(result)
#          sum        mean  count  max
# region
# East     660  220.000000      3  310
# West    1040  346.666667      3  410

Renommer les colonnes de sortie avec des agrégations nommées

Lorsque vous transmettez une liste de chaînes, les colonnes de sortie portent le nom des fonctions elles-mêmes ('sum', 'mean', etc.). Pour obtenir une sortie plus claire, utilisez des agrégations nommées : transmettez des arguments nommés dont la clé est le nom de colonne souhaité et la valeur est un tuple de (column, function). Il s’agit de l’approche Pandas moderne, qui produit un code explicite et facile à comprendre.

result = df.groupby('region').agg(
    total_revenue=('revenue', 'sum'),
    avg_revenue=('revenue', 'mean'),
    order_count=('revenue', 'count'),
    max_order=('revenue', 'max')
)
print(result)
#         total_revenue  avg_revenue  order_count  max_order
# region
# East              660   220.000000            3        310
# West             1040   346.666667            3        410

Des fonctions différentes pour des colonnes différentes

Vous pouvez transmettre un dictionnaire à agg(), dans lequel chaque clé est un nom de colonne et chaque valeur est une fonction — ou une liste de fonctions — à appliquer à cette colonne. Vous pouvez ainsi calculer, par exemple, sum sur revenue et mean sur units, le tout dans un seul appel GroupBy.

result = df.groupby('region').agg({
    'revenue': ['sum', 'mean'],
    'units':   ['sum', 'max']
})
print(result)
#        revenue             units
#            sum        mean   sum max
# region
# East       660  220.000000    63  28
# West      1040  346.666667   105  40

MultiIndex de colonnes avec agg() et un dictionnaire

Lorsque vous transmettez un dictionnaire contenant plusieurs fonctions par colonne, le résultat possède un MultiIndex sur les colonnes. Le premier niveau est le nom de la colonne d’origine et le deuxième, le nom de la fonction. Vous pouvez aplatir ces noms de colonnes en une seule chaîne avec une compréhension de liste, ce qui facilite l’utilisation ultérieure du résultat.

result = df.groupby('region').agg({'revenue': ['sum', 'mean'], 'units': 'sum'})

# Flatten MultiIndex columns
result.columns = ['_'.join(c).strip() for c in result.columns]
print(result.columns.tolist())
# ['revenue_sum', 'revenue_mean', 'units_sum']

Utiliser des fonctions personnalisées dans agg()

En plus des noms sous forme de chaînes, vous pouvez transmettre n’importe quelle fonction Python appelable à agg(). La fonction reçoit une Series — les valeurs de cette colonne dans un groupe — et doit renvoyer un scalaire. Vous pouvez transmettre une lambda ou une fonction nommée. Les fonctions personnalisées sont plus flexibles, mais plus lentes que les fonctions nommées intégrées, car elles ne peuvent pas utiliser les optimisations de niveau C.

def revenue_range(s):
    return s.max() - s.min()

result = df.groupby('region')['revenue'].agg(['sum', revenue_range])
print(result)
#          sum  revenue_range
# region
# East     660            160
# West    1040            120

Agrégations nommées avec des fonctions personnalisées

La syntaxe des agrégations nommées fonctionne également avec des fonctions appelables, et pas seulement avec des noms sous forme de chaînes. Il vous suffit de transmettre un tuple de (column, function) comme valeur de l’argument nommé, où la fonction est une fonction appelable qui accepte une Series et renvoie une valeur scalaire. Votre code reste ainsi lisible, même lorsque vous combinez des fonctions intégrées avec une logique personnalisée.

result = df.groupby('region').agg(
    total=('revenue', 'sum'),
    spread=('revenue', lambda s: s.max() - s.min()),
    top_units=('units', 'max')
)
print(result)
#         total  spread  top_units
# region
# East      660     160         28
# West     1040     120         40

Effectuer une agrégation sans sélectionner de colonne

Lorsque vous appelez agg() sur un GroupBy sans sélectionner de colonne précise, Pandas applique la fonction à chaque colonne numérique du DataFrame. C’est une manière rapide d’obtenir en une seule fois un résumé de toutes les colonnes numériques. Notez que les colonnes dont le type de données n’est pas numérique sont généralement ignorées silencieusement par la plupart des agrégations.

# Aggregate all numeric columns in one call
result = df.groupby('region').agg(['sum', 'mean'])
print(result)
#        revenue              units
#            sum        mean    sum   mean
# region
# East       660  220.000000     63  21.00
# West      1040  346.666667    105  35.00

Combiner agg() et reset_index()

Après agg(), la ou les colonnes de regroupement deviennent l’index. Il est courant d’appeler immédiatement reset_index() pour obtenir un DataFrame aplati, dans lequel les clés de regroupement sont des colonnes ordinaires. Vous pouvez ensuite renommer, trier et filtrer le résultat comme n’importe quel autre DataFrame, ce qui facilite sa transmission à l’étape suivante ou son exportation.

summary = (
    df.groupby('region')
      .agg(total=('revenue', 'sum'), orders=('revenue', 'count'))
      .reset_index()
      .sort_values('total', ascending=False)
)
print(summary)
#   region  total  orders
# 1   West   1040       3
# 0   East    660       3

agg() ou transform() ou apply()

Il est important de distinguer trois méthodes de GroupBy : agg() réduit chaque groupe à une valeur scalaire, ce qui produit un résultat comportant moins de lignes que l’original. transform() renvoie un tableau de la même forme que l’entrée, ce qui vous permet d’ajouter des statistiques au niveau du groupe comme nouvelles colonnes. apply() est la méthode la plus flexible, mais aussi la plus lente ; elle est présentée dans la leçon suivante.

# agg: one row per group
print(df.groupby('region')['revenue'].agg('mean'))
# region
# East    220.0
# West    346.7

# transform: one row per original row (group mean broadcast back)
df['group_mean'] = df.groupby('region')['revenue'].transform('mean')
print(df[['region', 'revenue', 'group_mean']].head())

Exemple pratique : résumé des ventes

Voici un exemple réaliste de bout en bout : calculer un tableau récapitulatif des ventes contenant le chiffre d’affaires total, la valeur moyenne des commandes, le nombre de commandes et l’étendue du chiffre d’affaires par région, avec des noms de colonnes clairs, puis le trier par chiffre d’affaires total décroissant. Ce modèle s’applique directement aux flux de travail d’analyse des produits, de la finance et du marketing.

summary = (
    df.groupby('region')
      .agg(
          total_revenue=('revenue', 'sum'),
          avg_order=('revenue', 'mean'),
          num_orders=('revenue', 'count'),
          revenue_range=('revenue', lambda s: s.max() - s.min())
      )
      .reset_index()
      .sort_values('total_revenue', ascending=False)
      .round(2)
)
print(summary)

Vérification rapide

Vérifiez votre compréhension de la méthode agg() présentée dans cette leçon.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris à effectuer plusieurs agrégations en une seule fois avec agg(), à utiliser les agrégations nommées pour obtenir des noms de colonnes clairs et à appliquer des fonctions différentes à des colonnes différentes à l’aide d’un dictionnaire. Nous allons maintenant découvrir transform() et filter(), qui réinjectent des informations au niveau des groupes dans le DataFrame d’origine.

Questions Fréquemment Posées

La leçon « La méthode agg() » est-elle gratuite ?

Oui — le texte complet de « La méthode agg() » 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 « La méthode agg() » ?

Appliquez plusieurs fonctions d’agrégation simultanément avec agg() et transmettez un dictionnaire pour calculer des statistiques différentes selon les colonnes. 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 3 sur 4.

Combien de temps prend la leçon « La méthode agg() » ?

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. Le schéma diviser-appliquer-combiner
  2. GroupBy avec une ou plusieurs clés
  3. La méthode agg()
  4. Transformation et filtrage avec GroupBy
← Retour à Pandas & NumPy Academy