TGViewer
Симулейтив Симулейтив @simulative_official · 7.46K subscribers
Post #3160 1.08K
3 варианта ранжирования в Pandas: какой правильный?

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

📈 Симулейтив
  • 🔥 6
  • 👍 5
  • ❤ 3
More from @simulative_official
  1. Oct 1, 2026Post #3592
  2. Sep 30, 2026💻💻💻💻💻 Откуда на самом деле берутся данные? На учебных задачах всё просто: тебе дают г…
  3. Sep 30, 2026⭐️ Топ метрик, которые должен уметь считать каждый аналитик Рекламные метрики — это не про…
  4. Sep 29, 2026⭐️ Уже сегодня: как ML-инженер учит компьютер находить смысл в тексте Сегодня покажем проф…
  5. Sep 28, 2026#проанализировали_и_поняли
  6. Sep 27, 2026💻💻💻💻💻 Как работает ML-инженер — на примере поиска похожих текстов Пользователь вводит…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →