Comment compter les observations par groupe chez les pandas
Souvent, vous pourriez être intéressé à compter le nombre d’ observations par groupe dans un DataFrame pandas.
Heureusement, cela est facile à faire en utilisant les fonctions groupby() et size() avec la syntaxe suivante :
df.groupby('column_name').size()
Ce tutoriel explique plusieurs exemples d’utilisation pratique de cette fonction à l’aide du bloc de données suivant :
import numpy as np import pandas as pd #create pandas DataFrame df = pd.DataFrame({'team': ['A', 'A', 'B', 'B', 'B', 'C', 'C'], 'division':['E', 'W', 'E', 'E', 'W', 'W', 'E'], 'rebounds': [11, 8, 7, 6, 6, 5, 12]}) #display DataFrame print(df) team division rebounds 0 A E 11 1 A W 8 2 B E 7 3 B E 6 4 B W 6 5 C W 5 6 C E 12
Exemple 1 : compter par une variable
Le code suivant montre comment compter le nombre total d’observations par équipe :
#count total observations by variable 'team' df.groupby('team').size() team A 2 B 3 C 2 dtype: int64
D’après le résultat, nous pouvons voir que :
- L’équipe A a 2 observations
- L’équipe B a 3 observations
- L’équipe C a 2 observations
Notez que le code précédent produit une série. Dans la plupart des cas, nous souhaitons travailler avec un DataFrame, nous pouvons donc utiliser la fonction reset_index() pour produire un DataFrame à la place :
df.groupby('team').size().reset_index(name='obs') team obs 0 A 2 1 B 3 2 C 2
Exemple 2 : compter et trier par une variable
Nous pouvons également utiliser la fonction sort_values() pour trier le nombre de groupes.
Nous pouvons spécifier ascending=False pour trier le nombre de groupes du plus grand au plus petit ou ascending=True pour trier du plus petit au plus grand :
df.groupby('team').size().reset_index(name='obs').sort_values(['obs'], ascending=True) team obs 0 A 2 2 C 2 1 B 3
Exemple 3 : Comptage par plusieurs variables
On peut également compter le nombre d’observations regroupées par plusieurs variables dans un DataFrame pandas :
#count observations grouped by team and division df.groupby(['team', 'division']).size().reset_index(name='obs') team division obs 0 A E 1 1 A W 1 2 B E 2 3 B W 1 4 C E 1 5 C W 1
D’après le résultat, nous pouvons voir que :
- 1 observation appartient à l’équipe A et à la division E
- 1 observation appartient à l’équipe A et à la division W
- 2 observations appartiennent à l’équipe B et à la division E
- 1 observation appartient à l’équipe B et à la division W
- 1 observation appartient à l’équipe C et à la division E
- 1 observation appartient à l’équipe C et à la division W
Ressources additionnelles
Comment calculer la somme des colonnes dans Pandas
Comment calculer la moyenne des colonnes dans Pandas
Comment trouver la valeur maximale des colonnes dans Pandas