Jak korzystać z funkcji groupby() i transform() w pandach
Do jednoczesnego użycia funkcji groupby() i transform() w ramce DataFrame pandy można użyć następujących metod:
Metoda 1: Użyj groupby() i transform() z wbudowaną funkcją
df[' new '] = df. groupby (' group_var ')[' value_var ']. transform (' mean ')
Metoda 2: Użyj groupby() i transform() z funkcją niestandardową
df[' new '] = df. groupby (' group_var ')[' value_var ']. transform ( lambda x: some function)
Poniższe przykłady pokazują, jak w praktyce używać każdej metody z następującą ramką DataFrame pand:
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
Przykład 1: Użyj groupby() i transform() z wbudowaną funkcją
Poniższy kod pokazuje, jak używać funkcji groupby( ) i transform() w celu dodania nowej kolumny do ramki danych o nazwie 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
Średnia wartość punktowa zawodników Drużyny A wyniosła 21,25 , a średnia wartość punktowa zawodników Drużyny B wyniosła 18,25 , zatem wartości te przypisano odpowiednio każdemu zawodnikowi w nowej kolumnie.
Zauważ, że możemy również użyć innej wbudowanej funkcji, takiej jak sum(), aby utworzyć nową kolumnę wyświetlającą sumę punktów zdobytych przez każdą drużynę:
#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
Suma punktów zawodników drużyny A wyniosła 85 , a suma punktów zawodników drużyny B wyniosła 73 , zatem wartości te przypisano odpowiednio każdemu zawodnikowi w nowej kolumnie.
Przykład 2: Użyj groupby() i transform() z funkcją niestandardową
Poniższy kod pokazuje, jak używać funkcji groupby( ) i transform() do tworzenia niestandardowej funkcji, która oblicza procent łącznej liczby punktów zdobytych przez każdego gracza w jego drużynie:
#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
Oto jak zinterpretować wynik:
- Pierwszy zawodnik drużyny A zdobył 30 punktów na 85 możliwych wśród zawodników drużyny A. Zatem jego procent wszystkich zdobytych punktów wyniósł 30/85 = 0,352941 .
- Drugi zawodnik Drużyny A zdobył 22 punkty na 85 możliwych wśród zawodników Drużyny A. Zatem jego procent wszystkich zdobytych punktów wyniósł 22/85 = 0,258824 .
I tak dalej.
Pamiętaj, że możemy użyć argumentu lambda w funkcji transform() , aby wykonać dowolne niestandardowe obliczenia.
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak wykonywać inne typowe operacje na pandach:
Jak wykonać sumę GroupBy w Pandach
Jak korzystać z Groupby i Plot w Pandach
Jak liczyć unikalne wartości za pomocą GroupBy w Pandach