Pandas : comment regrouper par plage de valeurs



Vous pouvez utiliser la syntaxe suivante pour utiliser la fonction groupby() dans pandas afin de regrouper une colonne par plage de valeurs avant d’effectuer une agrégation :

df.groupby(pd.cut(df['my_column'], [0, 25, 50, 75, 100])).sum()

Cet exemple particulier regroupera les lignes du DataFrame selon la plage de valeurs suivante dans la colonne appelée my_column :

  • (0, 25]
  • (25, 50]
  • (50, 75]
  • (75, 100]

Il calculera ensuite la somme des valeurs dans toutes les colonnes du DataFrame en utilisant ces plages de valeurs comme groupes.

L’exemple suivant montre comment utiliser cette syntaxe dans la pratique.

Exemple : Comment regrouper par plage de valeurs dans Pandas

Supposons que nous ayons le DataFrame pandas suivant qui contient des informations sur la taille des différents magasins de détail et leurs ventes totales :

import pandas as pd

#create DataFrame
df = pd.DataFrame({'store_size': [14, 25, 26, 29, 45, 58, 67, 81, 90, 98],
                   'sales': [15, 18, 24, 25, 20, 35, 34, 49, 44, 49]})

#view DataFrame
print(df)

   store_size  sales
0          14     15
1          25     18
2          26     24
3          29     25
4          45     20
5          58     35
6          67     34
7          81     49
8          90     44
9          98     49

Nous pouvons utiliser la syntaxe suivante pour regrouper le DataFrame en fonction de plages spécifiques de la colonne store_size , puis calculer la somme de toutes les autres colonnes du DataFrame en utilisant les plages comme groupes :

#group by ranges of store_size and calculate sum of all columns
df.groupby(pd.cut(df['store_size'], [0, 25, 50, 75, 100])).sum()

	 store_size    sales
store_size		
(0, 25]	         39	  33
(25, 50]	100	  69
(50, 75]	125	  69
(75, 100]	269	 142

À partir du résultat, nous pouvons voir :

  • Pour les lignes avec une valeur store_size comprise entre 0 et 25, la somme de store_size est 39 et la somme des ventes est 33 .
  • Pour les lignes avec une valeur store_size comprise entre 25 et 50, la somme de store_size est 100 et la somme des ventes est 69 .

Et ainsi de suite.

Si vous le souhaitez, vous pouvez également calculer uniquement la somme des ventes pour chaque plage de store_size :

#group by ranges of store_size and calculate sum of sales
df.groupby(pd.cut(df['store_size'], [0, 25, 50, 75, 100]))['sales'].sum()

store_size
(0, 25]       33
(25, 50]      69
(50, 75]      69
(75, 100]    142
Name: sales, dtype: int64

Vous pouvez également utiliser la fonction NumPy arange() pour découper une variable en plages sans spécifier manuellement chaque point de coupure :

import numpy as np

#group by ranges of store_size and calculate sum of sales
df.groupby(pd.cut(df['store_size'], np.arange(0, 101, 25)))['sales'].sum()

store_size
(0, 25]       33
(25, 50]      69
(50, 75]      69
(75, 100]    142
Name: sales, dtype: int64

Notez que ces résultats correspondent à l’exemple précédent.

Remarque : Vous pouvez trouver la documentation complète de la fonction NumPy arange() ici .

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans les pandas :

Pandas : Comment compter les valeurs uniques à l’aide de groupby
Pandas : Comment calculer la moyenne et la norme d’une colonne dans groupby
Pandas : Comment utiliser as_index dans groupby

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *