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

Ajouter un commentaire

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