Introduction
En analyse de données avec Python et pandas, l’une des tâches les plus courantes consiste à regrouper des données et à les résumer. S’il est facile de faire la somme ou la moyenne de colonnes numériques, il arrive que l’on souhaite rassembler toutes les valeurs d’une colonne dans une liste — par exemple, pour regrouper des lignes par horodatage et obtenir la liste des fichiers associés.
Ce tutoriel montre comment utiliser groupby()
de pandas avec des fonctions d’agrégation personnalisées pour :
- Faire la somme de valeurs numériques
- Agréger une colonne en une liste de valeurs uniques (comme des noms de fichiers ou des identifiants)
Objectif
À partir d’un DataFrame comme celui-ci :
time_coverage | filename | frp |
---|---|---|
2025-06-09T12:00Z | file_001.nc | 15.2 |
2025-06-09T12:00Z | file_002.nc | 17.5 |
2025-06-09T12:00Z | file_001.nc | 5.1 |
2025-06-09T13:00Z | file_003.nc | 9.8 |
Nous souhaitons regrouper par time_coverage
, puis :
- Faire la somme des valeurs
frp
- Rassembler une liste unique de fichiers pour chaque groupe
Étape 1 : Créer le DataFrame
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import pandas as pd # Données d’exemple df = pd.DataFrame({ 'time_coverage': [ '2025-06-09T12:00Z', '2025-06-09T12:00Z', '2025-06-09T12:00Z', '2025-06-09T13:00Z' ], 'filename': [ 'file_001.nc', 'file_002.nc', 'file_001.nc', 'file_003.nc' ], 'frp': [15.2, 17.5, 5.1, 9.8] }) |
Étape 2 : Regrouper et agréger
Utilisez groupby()
et agg()
pour calculer la somme et collecter les noms de fichiers :
1 2 3 4 | df_grouped = df.groupby('time_coverage').agg({ 'frp': 'sum', 'filename': list # collecte de tous les fichiers (avec doublons éventuels) }).reset_index() |
Résultat :
time_coverage | frp | filename |
---|---|---|
2025-06-09T12:00Z | 37.8 | ['file_001.nc', 'file_002.nc', 'file_001.nc'] |
2025-06-09T13:00Z | 9.8 | ['file_003.nc'] |
Notez que file_001.nc
apparaît deux fois pour le groupe 2025-06-09T12:00Z
.
Étape 3 : Obtenir des fichiers uniques
Pour retirer les doublons de la liste des fichiers, appliquez set()
:
1 2 3 4 | df_grouped = df.groupby('time_coverage').agg({ 'frp': 'sum', 'filename': lambda x: list(set(x)) }).reset_index() |
Résultat :
time_coverage | frp | filename |
---|---|---|
2025-06-09T12:00Z | 37.8 | ['file_001.nc', 'file_002.nc'] |
2025-06-09T13:00Z | 9.8 | ['file_003.nc'] |
Utilisez sorted(set(x))
pour ordonner les fichiers de manière cohérente :
1 2 3 4 | df_grouped = df.groupby('time_coverage').agg({ 'frp': 'sum', 'filename': lambda x: sorted(set(x)) }).reset_index() |
Étape 4 : Parcourir et afficher les résultats
Pour afficher chaque groupe et ses fichiers uniques :
1 2 3 4 5 6 | for idx, row in df_grouped.iterrows(): print(f"Horodatage : {row['time_coverage']}") print("Fichiers uniques :") for fname in row['filename']: print(f" - {fname}") print() |
Pourquoi éliminer les doublons est utile
Retirer les doublons lors d’une agrégation par groupe est utile lorsque :
- Vous voulez un rapport propre, sans répétition
- Vous comptez des éléments distincts par groupe
- Vous souhaitez éviter des redondances dans les résumés ou graphiques
Résumé
- Utilisez
groupby()
pour regrouper votre DataFrame par une ou plusieurs colonnes. -
Utilisez
agg()
pour : -
Faire la somme ou la moyenne de colonnes numériques (
'sum'
,'mean'
, etc.) - Collecter des valeurs uniques avec
lambda x: list(set(x))
- Triez les listes avec
sorted(set(x))
pour plus de lisibilité.
Cas d’usage
- Regrouper par date ou heure et lister les fichiers associés
- Agréger les identifiants utilisateurs uniques par catégorie
- Compiler des étiquettes ou des mots-clés par article ou événement
- Dédupliquer les sources associées à un événement