Pandas : Comment utiliser GroupBy avec le nombre de bacs



Vous pouvez utiliser la syntaxe suivante pour calculer le nombre de cases d’une variable regroupée par une autre variable dans pandas :

#define bins
groups = df.groupby(['group_var', pd.cut(df.value_var, bins)])

#display bin count by group variable
groups.size().unstack()

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

Exemple : utilisez GroupBy avec le nombre de bacs dans Pandas

Supposons que nous ayons le DataFrame pandas suivant qui montre les points marqués par les basketteurs de différentes équipes :

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
                            'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B'],
                   'points': [4, 7, 7, 11, 12, 15, 19, 19,
                             5, 5, 11, 12, 14, 14, 15, 15]})

#view DataFrame
print(df)

   team  points
0     A       4
1     A       7
2     A       7
3     A      11
4     A      12
5     A      15
6     A      19
7     A      19
8     B       5
9     B       5
10    B      11
11    B      12
12    B      14
13    B      14
14    B      15
15    B      15

On peut utiliser la syntaxe suivante pour calculer la fréquence des points pour chaque équipe, regroupés dans des bacs spécifiques :

#define groups
groups = df.groupby(['team', pd.cut(df.points, [0, 10, 15, 20])])

#display bin count grouped by team
groups.size().unstack()

points	(0, 10]	(10, 15] (15, 20]
  team			
     A	      3	       3	2
     B	      2	       6	0

Voici comment interpréter le résultat :

  • Au total, 3 joueurs de l’équipe A ont marqué entre 0 et 10 points.
  • Au total, 3 joueurs de l’équipe A ont marqué entre 10 et 15 points.
  • Au total, 2 joueurs de l’équipe A ont marqué entre 15 et 20 points.

Et ainsi de suite.

Notez que nous pouvons spécifier les bacs que nous souhaitons dans la fonction pd.cut() .

Par exemple, nous pourrions définir seulement deux bacs :

#define groups
groups = df.groupby(['team', pd.cut(df.points, [0, 10, 20])])

#display bin count grouped by team
groups.size().unstack()

points	(0, 10]	(10, 20]
  team		
     A	     3	      5
     B	     2	      6

Voici comment interpréter le résultat :

  • Au total, 3 joueurs de l’équipe A ont marqué entre 0 et 10 points.
  • Au total, 5 joueurs de l’équipe A ont marqué entre 10 et 20 points.
  • Au total, 2 joueurs de l’équipe B ont marqué entre 0 et 10 points.
  • Au total, 6 joueurs de l’équipe B ont marqué entre 10 et 20 points.

Note 1 : Vous pouvez trouver la documentation complète de la fonction GroupBy ici .

Note 2 : Vous pouvez trouver la documentation complète de la fonction cut ici .

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans les pandas :

Pandas : comment calculer la somme cumulée par groupe
Pandas : comment compter les valeurs uniques par groupe
Pandas : comment calculer le mode par groupe
Pandas : comment calculer la corrélation par groupe

Ajouter un commentaire

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