Як використовувати функції groupby() і transform() у pandas
Ви можете використовувати наступні методи для спільного використання функцій groupby() і transform() у pandas DataFrame:
Спосіб 1: використовуйте groupby() і transform() із вбудованою функцією
df[' new '] = df. groupby (' group_var ')[' value_var ']. transform (' mean ')
Спосіб 2. Використовуйте groupby() і transform() із спеціальною функцією
df[' new '] = df. groupby (' group_var ')[' value_var ']. transform ( lambda x: some function)
Наступні приклади показують, як використовувати кожен метод на практиці з такими pandas 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
Приклад 1: використовуйте groupby() і transform() із вбудованою функцією
Наступний код показує, як використовувати функції groupby( ) і transform() для додавання нового стовпця до DataFrame під назвою 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
Середнє значення очок для гравців команди A становило 21,25 , а середнє значення очок для гравців команди B становило 18,25 , тому ці значення були призначені відповідно кожному гравцеві в новому стовпці.
Зауважте, що ми також можемо використати іншу вбудовану функцію, таку як sum() , щоб створити новий стовпець із сумою очок, набраних кожною командою:
#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
Сума очок гравців команди A становила 85 , а сума очок гравців команди B становила 73 , тому ці значення були призначені відповідно кожному гравцеві в новому стовпчику.
Приклад 2: використовуйте groupby() і transform() із спеціальною функцією
У наступному коді показано, як використовувати функції groupby( ) і transform() для створення спеціальної функції, яка обчислює відсоток загальної кількості очок, набраних кожним гравцем у відповідних командах:
#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
Ось як інтерпретувати результат:
- Перший гравець команди A набрав 30 очок із загальної кількості 85 серед гравців команди A. Таким чином, його відсоток від загальної кількості набраних очок становив 30/85 = 0,352941 .
- Другий гравець команди А набрав 22 очки із загальної кількості 85 серед гравців команди А. Таким чином, його відсоток від загальної кількості набраних очок становив 22/85 = 0,258824 .
І так далі.
Зауважте, що ми можемо використовувати лямбда- аргумент у функції transform() для виконання будь-яких власних обчислень, які ми хочемо.
Додаткові ресурси
У наступних посібниках пояснюється, як виконувати інші типові операції в pandas:
Як виконати суму GroupBy у Pandas
Як використовувати Groupby та Plot у Pandas
Як підрахувати унікальні значення за допомогою GroupBy в Pandas