pandas rank: average, dense и одинаковые значения

Series.rank присваивает ранг каждому значению. Для одинаковых значений average использует средний ранг, min — минимальный, а dense — один общий ранг без пропуска следующего номера. ascending=False даёт лучшему большему значению меньший номер.

Короткий пример

import pandas as pd
scores = pd.Series([8, 8, 3])
print(scores.rank(method="average", ascending=False).tolist())
print(scores.rank(method="dense", ascending=False).tolist())

Результат:

[1.5, 1.5, 3.0]
[1.0, 1.0, 2.0]

Ранг не переставляет строки. Если далее нужна накопительная сумма по убыванию выручки, сначала явно отсортируйте строки, затем примените cumsum. Это отдельные операции с разными результатами.

Попробуйте самостоятельно

Ниже — отдельное задание с другими данными. Напишите решение и запустите проверку кода без регистрации. Для последовательного обучения откройте курс.

Документация.

Рейтинг продавцов: три метода rank и накопительная сумма после сортировки

Вы получаете таблицу продавцов с их месячной выручкой. Нужно сравнить три варианта ранжирования и вычислить накопительную сумму в порядке убывания выручки.

Что уже дано

Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.

Что нужно сделать

Напишите программу, которая:

  1. Читает из stdin целое число n — количество продавцов.
  2. Читает следующие n строк; каждая содержит два токена через пробел: name (строка без пробелов) и revenue (целое число). Пример строки: Аня 8000.
  3. Создаёт pd.DataFrame из словаря списков с ключами 'name' и 'revenue'.
  4. Добавляет три столбца рангов по убыванию revenue (ascending=False):
  • 'rank_avg' — method='average';
  • 'rank_min' — method='min';
  • 'rank_first' — method='first'.
  1. Сортирует DataFrame по 'revenue' по убыванию через sort_values, сбрасывает индекс через reset_index(drop=True).
  2. Добавляет столбец 'cum_revenue' — накопительную сумму revenue в текущем (уже отсортированном) порядке через df['revenue'].cumsum().
  3. Выводит в stdout заголовок и строки таблицы. Формат:
  • первая строка: name revenue rank_avg rank_min rank_first cum_revenue
  • каждая следующая строка: значения через пробел; rank_avg выводить с одним знаком после запятой, rank_min и rank_first — тоже с одним знаком, cum_revenue — целое число.

Ввод и вывод

Программа читает stdin и пишет в stdout.

Формат ввода

n
name1 revenue1
name2 revenue2
...

Формат вывода

name revenue rank_avg rank_min rank_first cum_revenue
name1 revenue1 ra1 rm1 rf1 cr1
...

Пример

Ввод
5
Аня 8000
Боря 12000
Вера 8000
Гена 5000
Даша 15000
Вывод
name revenue rank_avg rank_min rank_first cum_revenue
Даша 15000 1.0 1.0 1.0 15000
Боря 12000 2.0 2.0 2.0 27000
Аня 8000 3.5 3.0 3.0 35000
Вера 8000 3.5 3.0 4.0 43000
Гена 5000 5.0 5.0 5.0 48000
РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи