Метод cumcount
Метод cumcount применяется к объекту GroupBy
и возвращает Series с порядковыми номерами элементов
внутри каждой группы. Нумерация начинается с нуля.
Метод полезен для маркировки повторяющихся записей,
создания первичных ключей или ранжирования данных в группах.
Параметры метода:
-
ascending- булевый параметр, определяющий порядок нумерации. По умолчаниюTrue(возрастание). -
dtype- тип данных возвращаемой серии. По умолчаниюint64.
Синтаксис
df.groupby('column').cumcount(ascending=True, dtype=None)
Пример
Создадим таблицу с повторяющимися значениями в столбце 'a' и пронумеруем элементы внутри каждой группы:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2, 2, 3],
'b': [10, 20, 30, 40, 50, 60]
})
df['group_index'] = df.groupby('a').cumcount()
print(df)
Результат выполнения кода:
a b group_index
0 1 10 0
1 1 20 1
2 2 30 0
3 2 40 1
4 2 50 2
5 3 60 0
Для каждой группы значений в столбце 'a' (1, 2, 3) нумерация начинается с нуля.
Пример
Нумерация может выполняться в обратном порядке
с помощью параметра ascending:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2, 2, 3],
'b': [10, 20, 30, 40, 50, 60]
})
df['desc_index'] = df.groupby('a').cumcount(ascending=False)
print(df)
Результат выполнения кода:
a b desc_index
0 1 10 1
1 1 20 0
2 2 30 2
3 2 40 1
4 2 50 0
5 3 60 0
Пример
Метод cumcount часто используется вместе с
groupby для создания составных индексов.
В этом примере создадим столбец 'id' по двум группам:
import pandas as pd
df = pd.DataFrame({
'group': ['A', 'A', 'B', 'B', 'B'],
'value': [100, 200, 300, 400, 500]
})
df['id'] = df['group'] + '_' + df.groupby('group').cumcount().astype(str)
print(df)
Результат выполнения кода:
group value id
0 A 100 A_0
1 A 200 A_1
2 B 300 B_0
3 B 400 B_1
4 B 500 B_2