Comment utiliser les fonctions groupby() et transform() dans Pandas
Vous pouvez utiliser les méthodes suivantes pour utiliser les fonctions groupby() et transform() ensemble dans un DataFrame pandas :
Méthode 1 : utilisez groupby() et transform() avec la fonction intégrée
df['new'] = df.groupby('group_var')['value_var'].transform('mean')
Méthode 2 : utilisez groupby() et transform() avec une fonction personnalisée
df['new'] = df.groupby('group_var')['value_var'].transform(lambda x: some function)
Les exemples suivants montrent comment utiliser chaque méthode en pratique avec le DataFrame pandas suivant :
import pandas as pd #create DataFrame df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], 'points': [30, 22, 19, 14, 14, 11, 20, 28]}) #view DataFrame print(df) team points 0 A 30 1 A 22 2 A 19 3 A 14 4 B 14 5 B 11 6 B 20 7 B 28
Exemple 1 : utilisez groupby() et transform() avec la fonction intégrée
Le code suivant montre comment utiliser les fonctions groupby( ) et transform() pour ajouter une nouvelle colonne au DataFrame appelée mean_points :
#create new column called mean_points
df['mean_points'] = df.groupby('team')['points'].transform('mean')
#view updated DataFrame
print(df)
team points mean_points
0 A 30 21.25
1 A 22 21.25
2 A 19 21.25
3 A 14 21.25
4 B 14 18.25
5 B 11 18.25
6 B 20 18.25
7 B 28 18.25
La valeur moyenne des points pour les joueurs de l’équipe A était de 21,25 et la valeur moyenne des points pour les joueurs de l’équipe B était de 18,25 , ces valeurs ont donc été attribuées en conséquence à chaque joueur dans une nouvelle colonne.
Notez que nous pourrions également utiliser une autre fonction intégrée telle que sum() pour créer une nouvelle colonne affichant la somme des points marqués pour chaque équipe :
#create new column called sum_points
df['sum_points'] = df.groupby('team')['points'].transform('sum')
#view updated DataFrame
print(df)
team points sum_points
0 A 30 85
1 A 22 85
2 A 19 85
3 A 14 85
4 B 14 73
5 B 11 73
6 B 20 73
7 B 28 73
La somme des points des joueurs de l’équipe A était de 85 et la somme des points des joueurs de l’équipe B était de 73 , ces valeurs ont donc été attribuées en conséquence à chaque joueur dans une nouvelle colonne.
Exemple 2 : utilisez groupby() et transform() avec une fonction personnalisée
Le code suivant montre comment utiliser les fonctions groupby( ) et transform() pour créer une fonction personnalisée qui calcule le pourcentage du total de points marqués par chaque joueur de ses équipes respectives :
#create new column called percent_of_points
df['percent_of_points'] = df.groupby('team')['points'].transform(lambda x: x/x.sum())
#view updated DataFrame
print(df)
team points percent_of_points
0 A 30 0.352941
1 A 22 0.258824
2 A 19 0.223529
3 A 14 0.164706
4 B 14 0.191781
5 B 11 0.150685
6 B 20 0.273973
7 B 28 0.383562
Voici comment interpréter le résultat :
- Le premier joueur de l’équipe A a marqué 30 points sur un total de 85 parmi les joueurs de l’équipe A. Ainsi, son pourcentage du total de points marqués était de 30/85 = 0,352941 .
- Le deuxième joueur de l’équipe A a marqué 22 points sur un total de 85 parmi les joueurs de l’équipe A. Ainsi, son pourcentage du total de points marqués était de 22/85 = 0,258824 .
Et ainsi de suite.
Notez que nous pouvons utiliser l’argument lambda dans la fonction transform() pour effectuer tout calcul personnalisé que nous souhaitons.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans les pandas :
Comment effectuer une somme GroupBy dans Pandas
Comment utiliser Groupby et Plot dans Pandas
Comment compter les valeurs uniques à l’aide de GroupBy dans Pandas