Как применить функцию к pandas groupby


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

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

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

 import pandas as pd

#createDataFrame
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 to 18 14
1 To 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() для определения относительной частоты каждого названия команды в DataFrame 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

Из результата мы видим, что команда А появляется в 42,85% всех строк, а команда Б — в 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
At 22
B28
dtype: int64

Из результата мы видим, что максимальное количество очков, набранное командой А, составляет 22, а максимальное количество очков, набранное командой Б, — 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 в Pandas
Как использовать Groupby и Plot в Pandas
Как посчитать уникальные значения с помощью GroupBy в Pandas

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *