Как использовать функции groupby() и transform() в pandas
Вы можете использовать следующие методы для совместного использования функций groupby() и Transform() в DataFrame pandas:
Способ 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)
В следующих примерах показано, как использовать каждый метод на практике со следующим DataFrame pandas:
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
Сумма очков игроков команды А составила 85 , а сумма очков игроков команды Б — 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
Вот как интерпретировать результат:
- Первый игрок Команды А набрал 30 очков из 85, набранных среди игроков Команды А. Таким образом, его процент от общего количества набранных очков составил 30/85 = 0,352941 .
- Второй игрок Команды А набрал 22 очка из 85, набранных среди игроков Команды А. Таким образом, его процент от общего числа набранных очков составил 22/85 = 0,258824 .
И так далее.
Обратите внимание, что мы можем использовать аргумент лямбда в функции Transform() для выполнения любых пользовательских вычислений.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:
Как выполнить сумму GroupBy в Pandas
Как использовать Groupby и Plot в Pandas
Как посчитать уникальные значения с помощью GroupBy в Pandas