Как применить функцию к 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