Pandas : une formule simple pour « regrouper par avoir »



Vous pouvez utiliser la syntaxe de base suivante pour exécuter l’équivalent d’une instruction SQL « GROUP BY HAVING » dans les pandas :

df.groupby('some_column').filter(lambda x: some condition)

Les exemples suivants montrent comment utiliser cette syntaxe en pratique avec le DataFrame pandas suivant :

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'],
                   'position': ['G', 'F', 'F', 'G', 'F', 'F', 'G', 'G'],
                   'points': [30, 22, 19, 14, 14, 11, 20, 28]})

#view DataFrame
print(df)

  team position  points
0    A        G      30
1    A        F      22
2    A        F      19
3    B        G      14
4    B        F      14
5    B        F      11
6    C        G      20
7    C        G      28

Exemple 1 : Groupe de pandas en ayant avec Count

Le code suivant montre comment regrouper les lignes en fonction de la valeur dans la colonne d’équipe , puis filtrer uniquement les équipes dont le nombre est supérieur à 2 :

#group by team and filter for teams with count > 2
df.groupby('team').filter(lambda x: len(x) > 2)


        team	position points
0	A	G	 30
1	A	F	 22
2	A	F	 19
3	B	G	 14
4	B	F	 14
5	B	F	 11

Notez que seules les lignes avec une valeur d’équipe de « A » ou « B » sont renvoyées puisqu’il s’agit des deux équipes dont le nombre est supérieur à 2.

Exemple 2 : Groupe de pandas en ayant avec moyenne

Le code suivant montre comment regrouper les lignes en fonction de la valeur dans la colonne d’équipe , puis filtrer uniquement les équipes dont la valeur moyenne de points est supérieure à 20 :

#group by team and filter for teams with mean points > 20
df.groupby('team').filter(lambda x: x['points'].mean() > 20)

        team	position points
0	A	G	 30
1	A	F	 22
2	A	F	 19
6	C	G	 20
7	C	G	 28

Notez que seules les lignes avec une valeur d’équipe de « A » ou « C » sont renvoyées puisqu’il s’agit des deux équipes qui ont une valeur moyenne de points supérieure à 20.

Exemple 3 : Groupe de pandas en ayant avec somme

Le code suivant montre comment regrouper les lignes par valeur dans la colonne équipe , puis filtrer uniquement les équipes dont la somme de points est exactement égale à 48 :

#group by team and filter for teams with sum of points equal to 48
df.groupby('team').filter(lambda x: x['points'].sum() == 48)

        team	position points
6	C	G	 20
7	C	G	 28

Notez que seules les lignes avec une valeur d’équipe de « C » sont renvoyées puisqu’il s’agit de la seule équipe qui a une somme de points égale à 48.

Ressources additionnelles

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

Pandas : obtenir l’index des lignes dont la colonne correspond à la valeur
Pandas : comment sélectionner des colonnes contenant une chaîne spécifique
Pandas : comment vérifier si la colonne contient une chaîne

Ajouter un commentaire

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