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.
Table des matières
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 |