Pandas : Comment utiliser une fonction mutate() équivalente à R
Dans le langage de programmation R, nous pouvons utiliser la fonction mutate() du package dplyr pour ajouter rapidement de nouvelles colonnes à un bloc de données calculées à partir des colonnes existantes.
Par exemple, le code suivant montre comment calculer la valeur moyenne d’une colonne spécifique dans R et ajouter cette valeur en tant que nouvelle colonne dans un bloc de données :
library(dplyr) #create data frame df <- data.frame(team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), points=c(30, 22, 19, 14, 14, 11, 20, 28)) #add new column that shows mean points by team df <- df %>% group_by(team) %>% mutate(mean_points = mean(points)) #view updated data frame df team points mean_points 1 A 30 21.2 2 A 22 21.2 3 A 19 21.2 4 A 14 21.2 5 B 14 18.2 6 B 11 18.2 7 B 20 18.2 8 B 28 18.2
L’équivalent de la fonction mutate() dans les pandas est la fonction transform() .
L’exemple suivant montre comment utiliser cette fonction dans la pratique.
Exemple : utilisation de transform() dans pandas pour répliquer mutate() dans R
Supposons que nous ayons le DataFrame pandas suivant qui montre les points marqués par les basketteurs de différentes équipes :
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
Nous pouvons utiliser la fonction transform() pour ajouter une nouvelle colonne appelée Mean_points qui montre la moyenne des points marqués par chaque équipe :
#add new column to DataFrame that shows mean points by team 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 cela correspond aux résultats obtenus en utilisant la fonction mutate() dans l’exemple d’introduction.
Il convient de noter que vous pouvez également utiliser lambda pour effectuer des calculs personnalisés dans la fonction transform() .
Par exemple, le code suivant montre comment utiliser lambda pour calculer le pourcentage du total de points marqués par chaque joueur de son équipe respective :
#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