Hoe u de functies groupby() en transform() kunt gebruiken in pandas
U kunt de volgende methoden gebruiken om de functies groupby() en transform() samen te gebruiken in een pandas DataFrame:
Methode 1: Gebruik groupby() en transform() met ingebouwde functie
df[' new '] = df. groupby (' group_var ')[' value_var ']. transform (' mean ')
Methode 2: Gebruik groupby() en transform() met een aangepaste functie
df[' new '] = df. groupby (' group_var ')[' value_var ']. transform ( lambda x: some function)
De volgende voorbeelden laten zien hoe u elke methode in de praktijk kunt gebruiken met de volgende panda’s DataFrame:
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
Voorbeeld 1: Gebruik groupby() en transform() met ingebouwde functie
De volgende code laat zien hoe u de functies groupby( ) en transform() gebruikt om een nieuwe kolom aan het DataFrame toe te voegen met de naam 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 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
De gemiddelde puntwaarde voor spelers van team A was 21,25 en de gemiddelde puntwaarde voor spelers van team B was 18,25 , dus deze waarden werden dienovereenkomstig aan elke speler in een nieuwe kolom toegewezen.
Merk op dat we ook een andere ingebouwde functie zoals sum() kunnen gebruiken om een nieuwe kolom te maken die de som van de gescoorde punten voor elk team weergeeft:
#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 to 30 85
1 to 22 85
2 A 19 85
3 to 14 85
4 B 14 73
5 B 11 73
6 B 20 73
7 B 28 73
De som van de punten van de spelers van team A was 85 en de som van de punten van de spelers van team B was 73 , dus deze waarden werden dienovereenkomstig aan elke speler in een nieuwe kolom toegewezen.
Voorbeeld 2: Gebruik groupby() en transform() met een aangepaste functie
De volgende code laat zien hoe u de functies groupby( ) en transform() kunt gebruiken om een aangepaste functie te maken die het percentage van het totale aantal punten berekent dat door elke speler in zijn respectievelijke teams is gescoord:
#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
Zo interpreteert u het resultaat:
- De eerste speler van team A scoorde 30 punten op een totaal van 85 onder de spelers van team A. Zijn percentage van het totale aantal gescoorde punten was dus 30/85 = 0,352941 .
- De tweede speler van team A scoorde 22 punten op een totaal van 85 onder de spelers van team A. Zijn percentage van het totale aantal gescoorde punten was dus 22/85 = 0,258824 .
Enzovoort.
Merk op dat we het lambda- argument in de transform()- functie kunnen gebruiken om elke gewenste aangepaste berekening uit te voeren.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende bewerkingen in panda’s kunt uitvoeren:
Hoe u een GroupBy-som uitvoert in Pandas
Groupby en Plot gebruiken in Panda’s
Hoe u unieke waarden kunt tellen met GroupBy in Pandas