Skip to content

[Expliqué] Comment regrouper un DataFrame en Python, Pandas, PySpark

Le regroupement de données fait partie intégrante de l'analyse de données, que ce soit pour calculer des agrégats ou appliquer des transformations complexes. La fonction groupby de Pandas en Python est un outil robuste et polyvalent qui vous permet d'effectuer ces opérations efficacement. Grâce à ses fonctionnalités étendues, il simplifie le processus de manipulation de données regroupées en fonction de certaines conditions, ce qui rend l'analyse de données beaucoup plus fluide.

La fonction groupby de Pandas est particulièrement puissante lorsqu'il s'agit de traiter de grands DataFrames, grâce à sa mise en œuvre optimisée. En utilisant groupby sur les DataFrames de Pandas, vous pouvez regrouper par une ou plusieurs colonnes, appliquer plusieurs fonctions d'agrégation et même effectuer des tâches avancées telles que le filtrage et le tri des données regroupées. Ce guide vise à dévoiler la puissance de la fonction groupby de Pandas, en offrant des informations, des bonnes pratiques et des exemples concrets.

Vous voulez créer rapidement une visualisation de données à partir d'un DataFrame Pandas en Python, sans écrire de code ?

PyGWalker est une bibliothèque Python pour l'analyse exploratoire de données avec visualisation. PyGWalker (opens in a new tab) peut simplifier votre flux de travail d'analyse de données et de visualisation de données dans Jupyter Notebook, en transformant votre DataFrame Pandas (et DataFrame polars) en une interface utilisateur de style Tableau pour l'exploration visuelle.

PyGWalker pour la visualisation des données (opens in a new tab)

Comprendre le groupement de Pandas

En termes simples, l'opération groupby de Pandas consiste à diviser les données en groupes en fonction de certains critères, à appliquer une fonction à chaque groupe, puis à combiner les résultats. Ce processus est également connu sous le nom de stratégie "split-apply-combine", un terme inventé par la bibliothèque Pandas elle-même.

La fonction groupby de Pandas utilise un concept similaire à celui de l'instruction SQL GROUP BY, ce qui facilite la transition de SQL à Python pour l'analyse de données.

Voici un exemple de base de l'utilisation de groupby sur un DataFrame Pandas :

import pandas as pd
 
## Création d'un DataFrame d'exemple
data = {
    'Name': ['John', 'Anna', 'John', 'Anna', 'John', 'Anna'],
    'Subject': ['Maths', 'Maths', 'Physics', 'Physics', 'Chemistry', 'Chemistry'],
    'Score': [85, 90, 78, 88, 92, 95]
}
 
df = pd.DataFrame(data)
 
## Application de groupby
grouped = df.groupby('Name')
for name, group in grouped:
    print("\n", name)
    print(group)

Regroupement par plusieurs colonnes

En plus du regroupement par une seule colonne, groupby de Pandas prend également en charge le regroupement par plusieurs colonnes. Cela est particulièrement utile lorsque vous souhaitez catégoriser vos données en fonction de plusieurs attributs. Prenons l'exemple précédent et effectuons une opération groupby sur plusieurs colonnes :

## Application de groupby sur plusieurs colonnes
grouped_multiple = df.groupby(['Name', 'Subject'])
for (name, subject), group in grouped_multiple:
    print("\n", name, subject)
    print(group)

Comme vous pouvez le voir, groupby du DataFrame de Pandas a d'abord regroupé les données par 'Name', puis par 'Subject' à l'intérieur de chaque groupe 'Name'. Ce type de regroupement permet des opérations complexes d'analyse de données.

Fonctions d'agrégation avec groupby de Pandas

Un des principaux avantages de groupby de Pandas est qu'il nous permet d'appliquer des fonctions d'agrégation aux données regroupées. Les fonctions d'agrégation courantes comprennent sum, mean, count, max et min. Voyons un exemple d'utilisation de groupby et sum de Pandas :

## Utilisation de sum avec groupby
grouped_sum = df.groupby('Name')['Score'].sum()
print(grouped_sum)
 
 

Dans cet exemple, nous additionnons les scores de chaque étudiant. Remarquez que nous avons utilisé l'indexeur de colonne (['Score']) juste après groupby. C'est parce que la fonction sum ne peut être appliquée qu'à des données numériques. Nous devons donc sélectionner la colonne 'Score' pour appliquer la fonction sum.

Trier les données avec groupby de Pandas

Il est courant de trier les données après une opération de groupement. Par exemple, vous souhaiterez peut-être trier les groupes en fonction de leurs valeurs agrégées. Voici comment vous pouvez utiliser groupby sort values in pandas :

## Trier les données après groupby
grouped_sorted = df.groupby('Name')['Score'].sum().sort_values(ascending=False)
print(grouped_sorted)

Dans cet exemple, nous avons d'abord regroupé le DataFrame par 'Name', puis nous avons additionné le 'Score' pour chaque groupe, et enfin nous avons trié les groupes par la somme du 'Score' par ordre décroissant.

Agrégation personnalisée avec GroupBy et Apply

groupby de Pandas permet d'effectuer une agrégation personnalisée en utilisant la fonction apply. Cela peut être utile lorsque les fonctions d'agrégation intégrées ne suffisent pas. Par exemple, supposons que vous souhaitiez calculer la plage (maximum - minimum) des scores pour chaque étudiant. Vous pouvez utiliser groupby apply in pandas de la manière suivante :

## Agrégation personnalisée avec groupby apply
grouped_apply = df.groupby('Name')['Score'].apply(lambda x: x.max() - x.min())
print(grouped_apply)

Dans cet exemple, pour chaque groupe, nous calculons la plage du 'Score' en utilisant une fonction lambda, puis nous appliquons cette fonction à chaque groupe avec apply.

Différence entre GroupBy et Pivot dans Pandas

Tant groupby de Pandas que la table pivot sont des outils puissants pour la synthèse des données, mais ils servent à des fins différentes et sont utilisés dans des contextes différents. Pour illustrer, groupby de Pandas est utilisé lorsque vous souhaitez synthétiser vos données en fonction d'une catégorie, tandis que la table pivot est utilisée pour remodeler vos données. Dans une opération groupby pandas, vous spécifiez une ou plusieurs colonnes à regrouper, puis vous spécifiez une fonction d'agrégation à appliquer à chaque groupe. En revanche, une table pivotante prend des données simples par colonne en entrée et regroupe les entrées dans une table bidimensionnelle qui fournit une analyse multidimensionnelle.

Groupement de données non numériques dans Pandas

Il est en effet possible de "regrouper des données non numériques dans pandas". Bien que les fonctions d'agrégation telles que "sum" et "mean" ne puissent pas être appliquées aux données non numériques, il existe de nombreuses opérations que vous pouvez effectuer sur des données non numériques. Par exemple, vous pouvez compter le nombre d'occurrences de chaque catégorie, ou vous pouvez appliquer n'importe quelle fonction qui a du sens sur le type de données de la colonne non numérique.

## Regrouper des données non numériques et compter
grouped_count = df.groupby('Name')['Subject'].count()
print(grouped_count)

Dans cet exemple, nous comptons le nombre de matières que chaque étudiant a en regroupant par "Nom" et en comptant "Sujet".

GroupBy avec PySpark

Le concept de groupby s'applique également à des frameworks de big data comme PySpark. Bien que la syntaxe soit légèrement différente, l'idée reste la même - diviser les données en groupes et appliquer une fonction à chaque groupe.

## GroupBy dans PySpark
from pyspark.sql import SparkSession
 
spark = SparkSession.builder.getOrCreate()
 
## Charger les données dans PySpark DataFrame
df_pyspark = spark.createDataFrame(df)
 
## GroupBy dans PySpark
df_pyspark.groupby('Name').agg({'Score': 'sum'}).show()

En PySpark, vous devez utiliser la fonction agg pour appliquer une fonction d'agrégation après le regroupement. Dans l'exemple ci-dessus, nous regroupons par "Nom" et nous additionnons le "Score" pour chaque groupe.

Au fur et à mesure que vous plongez plus profondément dans le domaine de l'analyse de données avec Python, vous constaterez que pandas dataframe groupby est un compagnon fiable. Avec sa flexibilité et sa puissance, vous pouvez manipuler et explorer les données de manière qui étaient auparavant réservées aux personnes ayant des connaissances en programmation ou en statistiques. Alors plongez-vous dedans, expérimentez les différentes fonctionnalités et observez comment vos données produisent des informations précieuses !

FAQ

  1. Quelle est la différence entre groupby et pivot dans Pandas?

Groupby Pandas est utilisé pour résumer les données en fonction d'une catégorie, tandis que la table pivotante est utilisée pour remodeler les données en une table bidimensionnelle pour une analyse multidimensionnelle.

  1. Puis-je grouper des données non numériques dans Pandas?

Oui, vous pouvez effectuer un groupby sur des données non numériques dans Pandas. Bien que vous ne puissiez pas appliquer de fonctions d'agrégation comme sum ou mean aux données non numériques, il existe de nombreuses opérations que vous pouvez effectuer, comme compter le nombre d'occurrences de chaque catégorie.

  1. Comment utiliser groupby avec PySpark?

Le concept de groupby est similaire dans PySpark comme dans Pandas. Après le regroupement, vous devez utiliser la fonction agg dans PySpark pour appliquer une fonction d'agrégation à chaque groupe.