Как использовать функции groupby() и transform() в Pandas


Вы можете использовать следующие методы для совместного использования функций groupby() и transform() в кадре данных 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:

import pandas as pd

#create DataFrame
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 A 30
1 A 22
2 A 19
3 A      14
4 B 14
5 B 11
6 B 20
7 B 28

Пример 1: Использование groupby() и transform() со встроенной функцией

В следующем коде показано, как использовать функции groupby( ) и trasnform() для добавления в 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 A 30 21.25
1 A 22 21.25
2 A 19 21.25
3 A 14 21.25
4 B 14 18.25
5 B 11 18.25
6 B 20 18.25
7 B 28 18.25

Среднее значение очков для игроков команды А составило 21,25 , а среднее значение очков для игроков команды Б — 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 A 30 85
1 A 22 85
2 A 19 85
3 A 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 Sum в Pandas
Как использовать Groupby и Plot в Pandas
Как подсчитать уникальные значения с помощью GroupBy в Pandas

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.