Python : comment compter les valeurs uniques par groupe avec Pandas ?

La bibliothèque Pandas permet de traiter et d'analyser des données dans le langage Python. Il peut également gérer des tables stockées dans une base de données. Dans le langage SQL, on peut compter les valeurs uniques d'un groupe avec la clause "COUNT(DISTINCT(colonne))". Avec Pandas, il existe plusieurs solutions possibles.

La méthode "nunique()" s'applique à une série de résultats auxquels on a déjà appliqué la méthode "groupby()". Elle permet de lister les valeurs différentes de la colonne pour laquelle on a groupé les éléments et indique également le nombre d'occurrences de chaque élément.

ID | animal
1 | Chat
2| Chien
3 | Chat
4 | Chien
5 | Chat

Pour compter les valeurs de chaque animal, il suffit d'utiliser la directive suivante :

resultat = maTable.groupby('animal')['ID'].nunique()
print(resultat)
animal
'chat'    3
'chien'    2
Name: ID, dtype: int64

Si vous souhaitez enlever les apostrophes contenant les chaînes, vous devez modifier l'appel pour inclure une conversion en chaîne de la variable et la fonction "strip()" pour enlever les apostrophes.

resultat = maTable.groupby(maTable.animal.str.strip("'"))['ID'].nunique()
print(resultat)
animal
chat    3
chien    2
Name: ID, dtype: int64

Une autre solution qui compte directement les valeurs distinctes pour une colonne est la méthode "value_counts()". Son appel est plus direct que "nunique()" car elle est directement une méthode de chaque colonne et il n'y a pas à utiliser la méthode "groupby()" avant.

resultat = maTable.animal.value_counts()
print(resultat)
'chat'    3
'chien'    2
Name: ID, dtype: int64

Si vous souhaitez obtenir le nom des colonnes en plus des résultats, vous devez alors utiliser la méthode "agg()". Vous pouvez en paramètre préciser le nom de la colonne dans laquelle est intégré le décompte. Le résultat retourné est une dataframe alors que pour les autres fonctions, ce sont des séries.

resultat = maTable.groupby(by='animal', as_index=False).agg({'decompte': pd.Series.nunique})
print(resultat)
    animal    decompte
0    chat    3
1    chien    2

Autour du même sujet