Pandas: so verwenden sie eine mutate()-funktion, die r entspricht
In der Programmiersprache R können wir die Funktion mutate() aus dem dplyr- Paket verwenden, um schnell neue Spalten zu einem Datenrahmen hinzuzufügen, der aus den vorhandenen Spalten berechnet wird.
Der folgende Code zeigt beispielsweise, wie der Durchschnittswert einer bestimmten Spalte in R berechnet und dieser Wert als neue Spalte in einem Datenrahmen hinzugefügt wird:
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 to 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
Das Äquivalent der mutate()- Funktion in Pandas ist die transform() -Funktion.
Das folgende Beispiel zeigt, wie Sie diese Funktion in der Praxis nutzen können.
Beispiel: Verwendung von transform() in Pandas, um mutate() in R zu replizieren
Angenommen, wir haben den folgenden Pandas-DataFrame, der die von Basketballspielern verschiedener Teams erzielten Punkte anzeigt:
import pandas as pd #createDataFrame 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 to 30 1 to 22 2 to 19 3 to 14 4 B 14 5 B 11 6 B 20 7 B 28
Mit der Funktion transform() können wir eine neue Spalte namens „Mean_points“ hinzufügen, die die durchschnittlichen Punkte jedes Teams anzeigt:
#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 to 30 21.25 1 to 22 21.25 2 A 19 21.25 3 to 14 21.25 4 B 14 18.25 5 B 11 18.25 6 B 20 18.25 7 B 28 18.25
Der durchschnittliche Punktwert für Spieler von Team A betrug 21,25 und der durchschnittliche Punktwert für Spieler von Team B betrug 18,25 , sodass diese Werte jedem Spieler in einer neuen Spalte entsprechend zugewiesen wurden.
Beachten Sie, dass dies mit den Ergebnissen übereinstimmt, die mit der Funktion mutate() im Einführungsbeispiel erhalten wurden.
Es ist erwähnenswert, dass Sie Lambda auch verwenden können, um benutzerdefinierte Berechnungen in der Funktion transform() durchzuführen.
Der folgende Code zeigt beispielsweise, wie Lambda verwendet wird, um den Prozentsatz der Gesamtpunkte zu berechnen, die jeder Spieler in seinem jeweiligen Team erzielt:
#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
So interpretieren Sie das Ergebnis:
- Der erste Spieler von Team A erzielte 30 von insgesamt 85 Punkten unter den Spielern von Team A. Somit betrug sein Prozentsatz an der Gesamtpunktzahl 30/85 = 0,352941 .
- Der zweite Spieler von Team A erzielte 22 von insgesamt 85 Punkten unter den Spielern von Team A. Somit betrug sein Prozentsatz an der Gesamtpunktzahl 22/85 = 0,258824 .
Und so weiter.
Beachten Sie, dass wir das Lambda- Argument in der Funktion transform() verwenden können, um jede gewünschte benutzerdefinierte Berechnung durchzuführen.
Zusätzliche Ressourcen
In den folgenden Tutorials wird erläutert, wie andere gängige Vorgänge in Pandas ausgeführt werden:
So führen Sie eine GroupBy-Summe in Pandas durch
So verwenden Sie Groupby und Plot in Pandas
So zählen Sie eindeutige Werte mit GroupBy in Pandas