Pandas — один из основных инструментов аналитика: с его помощью можно решить огромное количество аналитических задач + он сильно помогает в оптимизации рутинной работы. А ещё его большое преимущество — его вполне реально выучить всего за две недели.
Однако в Pandas есть много тонких моментов, и мы хотим поделиться как раз одним из них. Ниже мы будем описывать свои действия, а на картинке прикрепили таблицу.
✅ Допустим, у вас есть датафрейм Pandas с информацией о менеджерах и их продажах. Ваша задача — отранжировать продажи в рамках каждого менеджера от минимальной до максимальной.
Код для создания датафрейма:
import pandas as pd
df = pd.DataFrame({
'manager': [1, 1, 2, 2, 2, 3, 4, 4, 4, 4, 4],
'sales': [100, 200, 300, 200, 100, 500, 700,
700, 700, 600, 800]
})
Сделаем это тремя способами и посмотрим на разницу:
➖
rank➖
rank + dense➖
cumcount➡️ Способ 1: rank
df['rank1'] = (
df
.groupby('manager')['sales']
.rank()
)
Самый простой способ — сделать это с помощью метода
rank. И кажется, что всё нормально, но посмотрите на продажи четвёртого менеджера. Всем записям со значением 700 почему-то присвоен ранг 3. Это связано с тем, что по умолчанию rank ставит средний ранг в группе — в данном случае среднее значение между (2, 3, 4).
Что ещё интересно — после 3 сразу идет 5, то есть ни 2, ни 4 у нас в этом наборе нет.
➡️ Способ 2: rank + dense
df['rank2'] = (
df
.groupby('manager')['sales']
.rank(method='dense')
)
Есть способ немного «улучшить» ранжирование, сделав ранг «плотным». Это значит, что не будет разрывов, как в предыдущем случае.
Давайте снова посмотрим на 4 менеджера — теперь у него все значения 700 имеют ранг 2, а после него логично идёт ранг 3. Это уже сильно лучше!
➡️ Способ 3: cumcount
df['rank3'] = (
df
.sort_values(['manager', 'sales'])
.groupby('manager')['sales']
.cumcount() + 1
)
А что, если мы вообще не хотим повторять ранги, даже если значения совпадают? Тогда можно воспользоваться методом
cumcount, который просто ранжирует значения по порядку, даже если они совпадают. По сути, мы получаем аналог функции
ROW_NUMBER в SQL, что также полезно в некоторых ситуациях. Теперь вы сможете подбирать нужный вариант в зависимости от задачи. А на бесплатном курсе по Pandas мы разбираем все эти функции с нуля — присоединяйтесь, чтобы освоить нужную для аналитика библиотеку!
🟠 Зарегистрироваться на курс: simulative.ru/pandas
📈 Симулейтив
