Класс GroupBy
Класс GroupBy создается при применении метода groupby
к DataFrame или Series. Он представляет собой
специальный объект, который содержит информацию о разбиении
данных на группы по заданным ключам. Объект GroupBy
не хранит сами данные, а хранит ссылки на исходные данные
и правила группировки, что позволяет эффективно выполнять
различные операции над группами.
Синтаксис
df.groupby(by, axis=0, level=None, sort=True)
Параметры метода groupby:
-
by- ключ или список ключей для группировки. Может быть столбцом, массивом или функцией. -
axis- ось для группировки, по умолчанию0(строки). -
level- уровень для группировки по индексу. -
sort- сортировка групп по ключам.
Атрибуты класса
Класс GroupBy содержит несколько полезных атрибутов:
-
groups- словарь, где ключи - названия групп, а значения - индексы элементов в каждой группе. -
ngroups- количество групп. -
indices- словарь с индексами каждой группы.
Пример
Создадим таблицу и сгруппируем её по столбцу:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 1, 2, 1],
'b': [10, 20, 30, 40, 50],
'c': [100, 200, 300, 400, 500]
})
grouped = df.groupby('a')
print(grouped)
Результат выполнения кода:
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f8a1b2c3d4e>
Как видите, объект GroupBy не выводит сами данные,
а только информацию о своём типе и адресе в памяти.
Пример
Выведем информацию о группах с помощью атрибута groups:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 1, 2, 1],
'b': [10, 20, 30, 40, 50],
'c': [100, 200, 300, 400, 500]
})
grouped = df.groupby('a')
print(grouped.groups)
Результат выполнения кода:
{1: [0, 2, 4], 2: [1, 3]}
Пример
Получим количество групп с помощью атрибута ngroups:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 1, 2, 1],
'b': [10, 20, 30, 40, 50],
'c': [100, 200, 300, 400, 500]
})
grouped = df.groupby('a')
print(grouped.ngroups)
Результат выполнения кода:
2
Пример
Выполним операцию агрегации над группами с помощью метода sum:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 1, 2, 1],
'b': [10, 20, 30, 40, 50],
'c': [100, 200, 300, 400, 500]
})
grouped = df.groupby('a')
print(grouped.sum())
Результат выполнения кода:
b c
a
1 90 900
2 60 600
Объект GroupBy позволяет применять множество методов
к группам, включая sum, mean, count,
agg и другие.
Пример
Получим первую строку из каждой группы с помощью метода first:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 1, 2, 1],
'b': [10, 20, 30, 40, 50],
'c': [100, 200, 300, 400, 500]
})
grouped = df.groupby('a')
print(grouped.first())
Результат выполнения кода:
b c
a
1 10 100
2 20 200