Как применить функцию к Pandas Groupby


Вы можете использовать следующий базовый синтаксис для совместного использования функций groupby() и apply() в кадре данных pandas:

df.groupby('var1').apply ( lambda x: some function)

В следующих примерах показано, как использовать этот синтаксис на практике со следующими пандами DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'B', 'B', 'B', 'B'],
 'points_for': [18, 22, 19, 14, 11, 20, 28],
 'points_against': [14, 21, 19, 14, 12, 20, 21]})

#view DataFrame
print(df)

 team points_for points_against
0 A 18 14
1 A 22 21
2 A 19 19
3 B 14 14
4 B 11 12
5 B 20 20
6 B 28 21

Пример 1: Используйте groupby() и apply() для поиска относительных частот

В следующем коде показано, как использовать функции groupby( ) и apply() для определения относительной частоты появления названия каждой команды в кадре данных pandas:

#find relative frequency of each team name in DataFrame
df.groupby('team').apply ( lambda x: x['team']. count () / df.shape [0])

team
A 0.428571
B 0.571429
dtype: float64

Из вывода мы видим, что команда A встречается в 42,85% всех строк, а команда B встречается в 57,14% всех строк.

Пример 2: Используйте groupby() и apply() для поиска максимальных значений

В следующем коде показано, как использовать функции groupby( ) и apply() для нахождения максимальных значений «points_for» для каждой команды:

#find max "points_for" values for each team
df.groupby('team').apply ( lambda x: x['points_for']. max ())

team
A 22
B 28
dtype: int64

Из вывода мы видим, что максимальное количество очков, набранных командой A, равно 22, а максимальное количество очков, набранных командой B, равно 28.

Пример 3: Используйте groupby() и apply() для выполнения пользовательских вычислений

В следующем коде показано, как использовать функции groupby( ) и apply() для нахождения средней разницы между «points_for» и «points_against» для каждой команды:

#find max "points_for" values for each team
df.groupby('team').apply ( lambda x: (x['points_for'] - x['points_against']).mean())

team
A 1.666667
B 1.500000
dtype: float64

Из вывода мы видим, что средняя разница между «баллами за» и «баллами против» составляет 1,67 для команды А и 1,50 для команды Б.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

Как выполнить GroupBy Sum в Pandas
Как использовать Groupby и Plot в Pandas
Как подсчитать уникальные значения с помощью GroupBy в Pandas

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