Comment calculer la fraction en pourcentage d'une variable catégorielle en utilisant Pandas GroupBy ?

Published: 21 septembre 2023

Tags: Python; Pandas; Dataframe;

DMCA.com Protection Status

Comment calculer la fraction en pourcentage d'une variable catégorielle en utilisant Pandas GroupBy ?

Exemple de calcul de la fraction en pourcentage d'une variable catégorielle en utilisant groupby sur une dataframe pandas.

Créez une dataframe.

Commençons par créer une DataFrame avec une colonne appelée 'class' contenant des variables catégorielles :

import pandas as pd

data = {'zone':['A','A','A','A','B','B'],
        'class':[1,1,1,2,1,3]}

df = pd.DataFrame(data)

donne

  zone  class
0    A      1
1    A      1
2    A      1
3    A      2
4    B      1
5    B      3

L'objectif est de calculer la fraction en pourcentage pour chaque variable catégorique dans chaque zone.

Calculer la fraction

D'abord, nous pouvons appliquer un groupby avec value_counts:

df.groupby(['zone'])['class'].value_counts(normalize=True)

donne

zone  class
A     1        0.75
      2        0.25
B     1        0.50
      3        0.50
Name: class, dtype: float64

Nous pouvons ensuite utiliser unstack() et fillna(0) (mettre 0 si la classe n'apparaît pas dans 'zone').

df.groupby(["zone"])["class"].value_counts(normalize=True).unstack("class").fillna(0)

donne

class     1     2    3
zone                  
A      0.75  0.25  0.0
B      0.50  0.00  0.5

Pour obtenir la fraction en pourcentage, il suffit de multiplier par 100 en utilisant mul(100) :

df.groupby(["zone"])["class"].value_counts(normalize=True).mul(100).unstack("class").fillna(0)

donne

class     1     2     3
zone                   
A      75.0  25.0   0.0
B      50.0   0.0  50.0

Références

Liens Site
groupby pandas.pydata.org
value_counts() pandas.pydata.org
unstack() pandas.pydata.org