Bemind
Учебник Python
Учебник Python
  • Python
    • Python Lists
      • Списковые включения в Python (Полное руководство с примерами)
      • Исправление ValueError: Слишком Много Значений Для Распаковки в Python
      • Как добавить словарь в список в Python
      • Как добавить строку в список в Python
      • Разница между массивами и списками в Python
      • Python: Различия между списками и кортежами
      • Как проверить, пуст ли список в Python
      • Как Итерировать (Циклически Проходить) По Списку в Python
      • Python List sort(): Подробное руководство по сортировке списков
      • Python List Extend: Как добавить несколько элементов в список
      • Python: Найти Индекс Всех Вхождений Элемента в Списке
      • Конвертация списка словарей в Pandas DataFrame
      • Генерация случайных чисел в Python
      • Поиск Индекса в Списке Python: Найти Первое, Последнее или Все Вхождения
      • Добавить в начало списка в Python (Вставить в начало)
      • Найти дубликаты в списке Python
      • Python: Умножение Списков (6 Различных Способов)
      • Python списки: Полный обзор
      • Python: Выбор случайного элемента из списка
      • 4 Способа Очистить Список в Python
      • Объяснение ошибки IndexError в Python: индекс списка выходит за пределы допустимого диапазона
      • Python: Получение индекса максимального элемента в списке
      • Python: Объединение списков – Слияние списков (8 способов)
      • Python: Проверка наличия элемента в списке
      • Python: Проверка наличия элемента в списке
      • Удаление элемента из списка в Python (pop, remove, del, clear)
      • Как перевернуть список в Python (6 способов)
      • Python: Замена элемента в списке (6 различных способов)
      • Python: Удаление дубликатов из списка (7 способов)
      • Python: Преобразование словаря в список кортежей (4 простых способа)
      • Python: Перемешать Список (Случайное Распределение Элементов Списка в Python)
      • Python: Пересечение двух списков
      • Python: Вычитание двух списков (4 простых способа!)
      • Длина или Размер Списка в Python: 5 Способов Узнать Длину Списка
      • Python: Транспонирование списка списков (5 простых способов!)
      • Python: Разделение списка (Пополам, на части)
      • Python: Комбинации списка (Получить все комбинации списка)
      • Python: Выравнивание списка списков (4 способа)
      • Разница между списками в Python: Нахождение разницы между двумя списками Python
      • Python: Найти среднее значение списка или списка списков
      • Как добавлять элементы в списки в Python – 4 простых способа!
      • Списковые включения в Python (Полное руководство с примерами)
      • 6 способов преобразовать список Python в строку
    • Python Dictionaries
      • Понимание словаря Python (с примерами)
      • Исправляем ValueError: Слишком Много Значений Для Распаковки в Python
      • Как добавить словарь в список в Python
      • Преобразование JSON в словарь Python
      • Полное руководство по вложенным словарям в Python
      • Копирование словаря в Python: Полное руководство
      • Конвертация списка словарей в Pandas DataFrame
      • Поиск дубликатов в списке Python
      • Полный обзор словарей в Python
      • Python: Добавление пары Ключ:Значение в Словарь
      • Python: Сортировка словаря по значениям
      • Слияние Словарей в Python – Комбинирование Словарей (7 Способов)
      • Python: Удаление Дубликатов из Списка (7 Способов)
      • Python: Преобразование словаря в список кортежей (4 простых способа)
      • Python: Красивая Печать Словаря (Dictionary) – 4 Способа
      • Python: Проверка пуст ли словарь (5 способов!)
      • Copy of Python: Проверка пуст ли словарь (5 способов!)
      • Python: Проверьте, существует ли ключ (или значение) в словаре (5 простых способов)
      • Python: Проверьте, существует ли ключ (или значение) в словаре (5 простых способов)
      • Python: Получение Ключа Словаря с Максимальным Значением (4 Способа)
      • Python: Удаление ключа из словаря (4 разных способа)
      • Как красиво вывести JSON-файл в Python (6 методов)
    • Python Strings
      • Python Капитализация Строк: Руководство по Преобразованию слов в Заглавные
      • Python strip: Как обрезать строку в Python
      • Python Обратная Строка: Руководство по Реверсированию Строк
      • Как Удалить Префикс или Суффикс из Строки в Python
      • Преобразование строки в формат заголовка в Python с помощью str.title()
      • Как добавить строку в список в Python
      • Python String startswith: Проверка, начинается ли строка с подстроки
      • Python String endswith: Проверка того, заканчивается ли строка подстрокой
      • Как удалить первый или последний символ из строки в Python
      • Как исправить: SyntaxError в Python - EOL при сканировании строкового литерала
      • Python String Contains: Проверка Наличия Подстроки в Строке
      • Как проверить, пустая ли строка в Python
      • Python Новая Строка и Как Печатать Без Переноса Строки
      • Как Конкатенировать Строки в Python: Полное Руководство
      • Python: Подсчет слов в строке или файле
      • Как создать список алфавита в Python
      • Python: Конкатенация строки и целого числа (Int)
      • Python: Сортировка строки (4 различных способа)
      • Python zfill и rjust: Добавление нулей в строку в Python
      • Python: Целое в Двоичное (Преобразование целого числа в двоичную строку)
      • Python rfind: Нахождение индекса последней подстроки в строке
      • Python SHA256 хеширование алгоритм: объяснение
      • Python: Усечение числа с плавающей точкой (6 различных способов)
      • Выбор между методами Python isdigit(), isnumeric() и isdecimal()
      • Python: Удаление специальных символов из строки
      • Python Приведение Строки к Нижнему Регистру с помощью .lower(), .casefold(), и .islower()
      • Python программа для проверки, является ли строка палиндромом (6 методов)
      • Python: Найдите все перестановки строки (3 легких способа!)
      • Python: Удаление пунктуации из строки (3 разных способа!)
      • Python: Найти индекс (или все индексы) подстроки в строке
      • Python: Удаление символов новой строки из строки
      • Python: Удаление символа из строки (4 способа)
      • Python: Количество вхождений в строке (4 способа!)
    • Встроенные функции Python
      • abs()
      • ascii()
      • aiter()
      • all()
      • any()
      • anext()
      • bin()
      • bool()
      • breakpoint()
      • bytearray()
      • bytes()
      • callable()
      • chr()
      • classmethod()
      • compile()
      • complex()
      • delattr()
      • dict()
      • dir()
      • divmod()
      • enumerate()
      • eval()
      • exec()
      • filter()
      • float()
      • format()
      • frozenset()
      • getattr()
      • globals()
      • hasattr()
      • hash()
      • help()
      • hex()
      • id()
      • input()
      • int()
      • issubclass()
      • iter()
      • len()
      • list()
      • locals()
      • map()
      • max()
      • memoryview()
      • min()
      • next()
      • object()
      • oct()
      • open()
      • ord()
      • pow()
      • print()
      • property()
      • range()
      • repr()
      • reversed()
      • round()
      • set()
      • setattr()
      • isinstance()
      • slice()
      • zip()
      • type()
      • sorted()
      • staticmethod()
      • str()
      • sum()
      • super()
      • tuple()
      • vars()
      • import()
    • Cобеседования Python. Разбор реальных вопросов.
    • Встроенные методы в Python
  • Учебники по Pandas и Numpy
    • Numpy
      • Функция активации ReLU для глубокого обучения: полное руководство по выпрямленному линейному блоку
      • Как нормализовать массивы NumPy (минимальное-максимальное масштабирование, Z-оценка, L2)
      • NumPy where: Условная обработка элементов массива
      • NumPy linspace: создание равномерно расположенных массивов с помощью np.linspace
      • Как рассчитать векторное произведение в Python
      • Разделение NumPy: Разделение массива NumPy на части
      • NumPy: Лучшие способы применения функции к массиву
      • NumPy full: Создание массивов с заданным значением
      • NumPy clip(): Ограничьте значения массива минимальным и максимальным значениями
      • NumPy cumsum: Расчет кумулятивных сумм массивов NumPy
      • Изучаем функцию np.histogram в NumPy: создаем гистограмму
      • NumPy arange(): Полное руководство (с примерами)
      • Руководство по индексации и срезам массивов NumPy: Полное руководство
      • NumPy argmin(): Получение индекса минимального значения в массивах
      • Выравнивание массива с помощью NumPy flatten
      • Объединение массивов NumPy по различным осям с использованием функции stack
      • Удаление размерности из массивов NumPy с помощью NumPy Squeeze
      • Функция np.repeat() NumPy: Повторение массивов NumPy
      • Использование функции NumPy.exp() для вычисления экспоненты
      • Реализация функции сигмоида на Python
      • NumPy Pad: Использование np.pad() для дополнения массивов и матриц
      • np.argmax(): Как использовать NumPy Argmax
      • NumPy logspace: Понимание функции np.logspace()
      • Использование NumPy Tile для Расположения Массивов
      • NumPy Zeros: Создание массивов и матриц с нулями в NumPy
      • Использование числа Пи в Python (NumPy и Math)
      • Распределение Нормального (Гауссова) Распределения в Numpy (Случайное Нормальное в Numpy)
      • NumPy для Data Science на Python
      • Расчет скалярного произведения с использованием Numpy в Python
      • Расчет натурального логарифма на Python
    • Pandas
      • Python сводные таблицы – Полное руководство
      • Изучение API стиля Pandas
      • Объяснение группировки по нескольким столбцам в Pandas с примерами
      • Удаление индексной колонки DataFrame в Pandas: Руководство с примерами
      • Pandas Quantile: Расчет процентилей в DataFrame
      • Как рассчитать скользящее среднее (среднее арифметическое) в Pandas
      • Руководство по использованию метода fillna в Pandas для работы с отсутствующими данными в DataFrame
      • Pandas unique(): Получение уникальных значений в DataFrame
      • Распакуйте Ваши Данные с Помощью Функции Melt в Pandas
      • Pandas date_range: Как Создать Диапазон Дат в Pandas
      • Сброс индекса в Pandas: как сбросить индекс в Pandas
      • Pandas replace() – Замена значений в DataFrame Pandas
      • Перемещение столбца DataFrame Pandas на позицию (В начало и в конец)
      • Учебное пособие по Python Pandas: полное руководство
      • Pandas: Замена NaN на нули
      • Преобразование DataFrame Pandas в файл Pickle
      • Конвертация Pandas DataFrame в JSON
      • Преобразование DataFrame Pandas в Словарь
      • Преобразование Pandas DataFrame в Список
      • Чтение файлов Parquet в Pandas с помощью pd.read_parquet
      • Pandas dropna(): Удаление отсутствующих записей и столбцов в DataFrame
      • Как Добавить Новый Столбец в DataFrame Pandas
      • Подсчёт уникальных значений в Pandas
      • Отображение всех столбцов и строк в DataFrame Pandas
      • Pandas to_excel: Запись DataFrames в файлы Excel
      • Как использовать Pandas для чтения файлов Excel в Python
      • Преобразование списка словарей в Pandas DataFrame
      • Как добавить/вставить строку в DataFrame Pandas
      • Диаграмма рассеяния в Pandas: Как создать диаграмму рассеяния в Pandas
      • Pandas to_datetime: Преобразование строки Pandas в дату и время
      • Введение в Pandas для Data Science
      • Индексация, Выборка и Присваивание Данных в Pandas
      • Суммирование и Анализ Pandas DataFrame
      • Преобразование столбцов Pandas с помощью map и apply
      • Группировка данных в Pandas с использованием cut и qcut
      • Дата и время в Pandas и Python
      • Очистка и подготовка данных в Pandas и Python
      • Pandas GroupBy: группировка, суммирование и агрегация данных в Python
      • Pandas Дата и Время в Части Даты (месяц, год и т.д.)
      • Pandas: Получение номера строки из DataFrame
      • Вычисление Взвешенного Среднего в Pandas и Python
      • Как перемешать строки Pandas Dataframe в Python
      • Pandas: количество столбцов (подсчет столбцов в DataFrame)
      • Pandas Sum: сложение столбцов и строк DataFrame
      • Pandas Diff: Вычисление Разницы Между Строками Pandas
      • Нормализация столбца или датафрейма Pandas (с использованием Pandas или sklearn)
      • Функция Rank в Pandas: Ранжирование данных в Dataframe (Эквивалент SQL row_number)
      • Pandas Describe: Описательная статистика вашего Dataframe
      • Pandas Shift: Перемещение столбца DataFrame вверх или вниз
      • 7 Способов Выполнения Выборки Данных в Pandas
      • Экспорт DataFrame Pandas в CSV файл – Использование .to_csv()
      • Pandas: Итерация по строкам DataFrame в Pandas
      • Pandas: Преобразование значений столбца в строки
      • Дисперсия в Pandas: Вычисление дисперсии столбца в Pandas Dataframe
      • Pandas: Создание DataFrame из списков (5 способов!)
      • Pandas Rename Index: Как переименовать индекс DataFrame в Pandas
      • Pandas: Подсчёт уникальных значений в объекте GroupBy
      • Pandas: Добавить дни к колонке с датами
      • Среднее в Pandas: Как рассчитать среднее для одной или нескольких колонок
      • Pandas Column to List – Конвертируйте колонку Pandas в список
      • Транспонирование Dataframe в Pandas
      • Python: Разделение DataFrame Pandas
      • Как получить имена столбцов в DataFrame Pandas
      • Pandas: Количество строк в DataFrame (6 способов)
      • Создание пустого DataFrame Pandas и добавление данных
      • Как переименовать столбцы в Pandas DataFrame (с примерами)
      • Изменение порядка столбцов в Pandas: использование метода reindex и метода insert
      • Pandas get_dummies (One-Hot кодирование), объяснение
      • Относительные и Абсолютные Частоты в Python и Pandas
      • Финансовый год – Определение финансового года в Pandas
      • Как сортировать данные в DataFrame Pandas
  • Учебники Matplotlib и Seaborn
    • Seaborn
      • Регрессионные графики в Seaborn с использованием regplot и lmplot
      • Seaborn residplot – Построение остатков линейной регрессии
      • Seaborn jointplot() – Создание совместных графиков в Seaborn
      • Seaborn displot – Распределенческие графики в Python
      • Seaborn ecdfplot – Эмпирические функции накопленного распределения
      • Seaborn rugplot – Визуализация маргинальных распределений
      • Seaborn kdeplot – Создание графиков оценки плотности ядра
      • Seaborn histplot – Создание Гистограмм в Seaborn
      • Seaborn catplot – Визуализация категориальных данных в Python
      • Средняя тенденция для категориальных данных в Seaborn Pointplot
      • Seaborn stripplot: Jitter Plots для распределений категориальных данных
      • Seaborn Countplot – Подсчет категориальных данных в Python
      • Seaborn swarmplot: Bee Swarm Plots для распределения категориальных данных
      • Скрипичные графики Seaborn в Python: Полное руководство
      • Настройка расположения легенд Seaborn, меток, текста и т.д.
      • Тепловая карта Seaborn: Полное руководство
      • Создание многосекционных сеток в Seaborn с помощью FacetGrid
      • Удаление рамки в Seaborn: Как работать с рамкой
      • Заголовки и метки осей в Seaborn: добавление и настройка
      • Как установить Seaborn в Python (Исправление: no module named seaborn)
      • Seaborn relplot – Создание точечных и линейных графиков
      • Полное руководство по созданию точечных диаграмм (scatter plots) в Python с использованием Seaborn
    • Matplotlib
      • Режим Retina в Matplotlib: Улучшение Качества Графиков
      • Как построить функцию в Python с использованием Matplotlib
      • Как создать 3D-диаграммы рассеяния в Matplotlib
      • Как изменить размер шрифта в графике Matplotlib
      • Установка размера маркера в точечных диаграммах Matplotlib
      • Как изменить размер графика и фигуры в Matplotlib
      • Как добавить названия в Matplotlib: Заголовок, Подзаголовок, Названия Осей
      • Pandas Scatter Plot: Как создать диаграмму рассеяния в Pandas
      • Построение графиков в Python с помощью Matplotlib
      • Диаграммы рассеяния Matplotlib – Все, что вам нужно знать
      • Диаграммы с столбцами в Matplotlib – Узнайте все, что вам нужно знать
      • Линейные диаграммы Matplotlib – Всё, что вам нужно знать
      • Построение гистограммы в Python с Matplotlib и Pandas
  • Алгоритмы
    • Алгоритм поиска в ширину (BFS) в Python
    • Алгоритм поиска в глубину (DFS) на Python
  • AI создает хедж-фонд для анализа акций на Python
Powered by GitBook
On this page
  • Понимание метода ранжирования Pandas
  • Загрузка образца Pandas Dataframe
  • Базовый рейтинг вашего фреймворка данных Pandas
  • Pandas Rank Dataframe с обратным порядком сортировки
  • Pandas ранжирует Dataframe разными методами
  • Pandas Rank Dataframe с Groupby (группированные рейтинги)
  • Pandas Rank Dataframe с процентами (нормализованные рейтинги)
  • Pandas ранжирует только числовые столбцы в Dataframe
  • Заключение
  1. Учебники по Pandas и Numpy
  2. Pandas

Функция Rank в Pandas: Ранжирование данных в Dataframe (Эквивалент SQL row_number)

PreviousНормализация столбца или датафрейма Pandas (с использованием Pandas или sklearn)NextPandas Describe: Описательная статистика вашего Dataframe

Last updated 1 month ago

Функция rank в Pandas может использоваться для ранжирования данных и является эквивалентом функции SQL ROW_NUMBER. В этом уроке вы узнаете, как использовать функцию rank, включая ранжирование всего датафрейма или отдельных столбцов. Вы изучите, как использовать различные параметры функции rank в Pandas. Это позволит вам изменять порядок ранжирования и обрабатывать равные значения в их ранжировании. Вы также узнаете, как ранжировать датафрейм Pandas в сочетании с группированными данными. Вы пройдете практический пример того, как выбрать только строки с наибольшими значениями в группировке.

Краткий ответ: Функция .rank() в Pandas для ранжирования данных

# Понимание метода Pandas .rank()

import pandas as pd
df.rank(
    axis=0,             # Ранжировать столбцы / строки
    method='average',   # Как ранжировать дублирующиеся значения
    numeric_only=True,  # Ранжировать только числовые столбцы
    na_option='keep',   # Как ранжировать пропущенные данные
    ascending=True,     # В каком порядке ранжировать
    pct=False           # Ранжировать в нормализованном виде или нет
)

Оглавление

Понимание метода ранжирования Pandas

Метод .rank() в Pandas очень похож на оконную функцию ROW_NUMBER(), встречающуюся в SQL. Он позволяет вам ранжировать данные различными способами. На первый взгляд функция выглядит довольно простой. Однако, за внешней простотой скрывается много сложностей, и в этой статье мы их все исследуем.

Давайте рассмотрим базовый синтаксис метода rank в Pandas, чтобы увидеть, какие аргументы

import pandas as pd

df.rank(
    axis=0,             # Ранжировать столбцы / строки (0 - столбцы, 1 - строки)
    method='average',   # Как ранжировать дублирующиеся значения ('average', 'min', 'max', 'first', 'dense')
    numeric_only=True,  # Ранжировать только числовые столбцы
    na_option='keep',   # Как ранжировать пропущенные данные ('keep', 'top', 'bottom')
    ascending=True,     # В каком порядке ранжировать (True - по возрастанию, False - по убыванию)
    pct=False           # Ранжировать в нормализованном виде или нет (True - в процентах, False - в виде рангов)
)

Давайте разберем эти аргументы немного подробнее, чтобы понять, как мы можем использовать их для получения желаемых результатов при ранжировании наших данных:

  • axis=: определяет, по какому индексу направлять ранжирование (по строкам или столбцам)

  • method=: как ранжировать группы записей, которые имеют одинаковое значение

  • numeric_only=: если весь датафрейм ранжируется, указывает, включать ли только числовые столбцы или нет.

  • na_option=: как ранжировать значения

  • по возрастанию=: должны ли элементы упорядочиваться по возрастанию или нет

  • pct=: отображать ли возвращаемые рейтинги в процентной форме (т.е., нормализовать рейтинги до значения 1)

Здесь видно, что метод Pandas .rank() предлагает большую гибкость, предоставляя множество значений по умолчанию для аргументов, что обеспечивает общую согласованность

Одним из очень интересных аргументов является аргумент method=, который предоставляет нам несколько вариантов, как обрабатывать дубликаты значений (т.е. «связанные» значения). Например, мы можем захотеть присвоить этим значениям одинаковый ранг или взять их среднее значение. В следующем разделе мы подробно рассмотрим это, чтобы вы могли получить нужный результат.

Начнем с загрузки примера фрейма данных Pandas, чтобы помочь следовать инструкциям.

Загрузка образца Pandas Dataframe

Если вы хотите следовать за этим руководством построчно, не стесняйтесь загрузить пример Pandas dataframe ниже. Если у вас есть собственный dataframe, чтобы следить за процессом, это тоже отлично!

Давайте посмотрим, как выглядит наш датафрейм, сначала загрузив его, а затем выводим первые пять записей с помощью метода .head() датафрейма.

# Загрузка примера DataFrame Pandas для учебника

import pandas as pd

# Создание DataFrame из словаря
df = pd.DataFrame.from_dict({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra', 'Piet', 'Maya'],  # Имена
    'Count': [100, 100, 105, 95, 75, 150],  # Количество
    'Score': [22, 33, 11, 55, 77, 99]   # Оценки
})

# Вывод первых 5 строк DataFrame
print(df.head())

# Результат:
#    Name  Count  Score
# 0   Nik    100     22
# 1  Kate    100     33
# 2  Evan    105     11
# 3  Kyra     95     55
# 4  Piet     75     77

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

Базовый рейтинг вашего фреймворка данных Pandas

Самый простой способ применить .rank() из Pandas ко всему DataFrame с аргументами по умолчанию.

Посмотрим, что произойдет, когда мы сделаем это с нашим датафреймом, df:

# Ранжирование всего DataFrame

ranked = df.rank()  # Применение метода rank() ко всему DataFrame

print(ranked)  # Вывод ранжированного DataFrame

# Результат:
#    Name  Count  Score
# 0   5.0    3.5    2.0
# 1   2.0    3.5    3.0
# 2   1.0    5.0    1.0
# 3   3.0    1.5    NaN
# 4   6.0    1.5    4.0
# 5   4.0    6.0    5.0

В приведённом выше примере мы применили метод .rank() ко всему нашему датафрейму. Давайте посмотрим, что произошло в результате:

  • Строковый столбец был отсортирован по алфавиту в порядке возрастания.

  • Отсутствующие значения рассматриваются как NaN, что означает, что они фактически игнорируются при ранжировании.

  • Эквивалентные элементы ранжируются методом «среднего», что означает, что значения рангов усредняются.

Теперь давайте посмотрим, как можно ранжировать только один столбец. **Метод Pandas .rank() разработан таким образом, что возвращает тот же тип, что и объект, вызвавший метод – это означает, что метод вернет DataFrame, если передан DataFrame, и Series (или столбец), если передан Series.

Теперь давайте посмотрим, как можно передать только один столбец и как на самом деле происходит ранжирование. Мы создадим новый столбец Score_Ranked, который предоставит ранжирование для столбца Score. Давайте посмотрим,

# Ранжирование только одного столбца в Pandas

df['Score_Ranked'] = df['Score'].rank()  # Создание нового столбца 'Score_Ranked' с рангами значений столбца 'Score'

print(df)  # Вывод DataFrame с добавленным столбцом рангов

# Результат:
#    Name  Count  Score  Score_Ranked
# 0   Nik    100     22      2.0
# 1  Kate    100     33      3.0
# 2  Evan    105     11      1.0
# 3  Kyra     95     55      4.0
# 4  Piet     75     77      5.0
# 5  Maya    150     99      6.0

Здесь мы видим, что создается новый столбец, который предоставляет настройки по умолчанию для ранжирования столбца

В следующих разделах вы узнаете, как изменить аргументы метода .rank(), чтобы изменить его поведение.

Pandas Rank Dataframe с обратным порядком сортировки

По умолчанию метод .rank() в Pandas сортирует данные в порядке возрастания, что означает, что элементы с меньшими значениями будут иметь более низкий ранг (т. е. начиная с 1). Если вы хотите изменить это поведение и отсортировать значения в порядке убывания, мы можем установить параметр.

Давайте посмотрим, как это выглядит, когда мы ранжируем тот же столбец

# Изменение порядка ранжирования DataFrame Pandas

df['Score_Ranked_Asc'] = df['Score'].rank()  # Ранжирование столбца 'Score' по возрастанию

df['Score_Ranked_Desc'] = df['Score'].rank(ascending=False)  # Ранжирование столбца 'Score' по убыванию

print(df)  # Вывод DataFrame с двумя новыми столбцами рангов

# Результат:
#     Name  Count  Score  Score_Ranked  Score_Ranked_Asc  Score_Ranked_Desc
# 0   Nik    100     22           2.0               2.0                5.0
# 1  Kate    100     33           3.0               3.0                4.0
# 2  Evan    105     11           1.0               1.0                6.0
# 3  Kyra     95     55           4.0               4.0                3.0
# 4  Piet     75     77           5.0               5.0                2.0
# 5  Maya    150     99           6.0               6.0                1.0

В следующем разделе вы узнаете, как ранжировать равные элементы различными методами, используя аргумент.

Pandas ранжирует Dataframe разными методами

Не редкость, когда данные содержат одинаковые значения. Обычно это не вызывает проблем, но когда вы используете Pandas для ранжирования данных, одинаковым значениям нужно задать порядок сортировки. В этом случае аргумент method= пригодится.

Метод rank в Pandas имеет аргумент method=, который принимает несколько различных опций. Давайте кратко рассмотрим их:

  • «среднее»: средний ранг группы (например, если две величины находятся на 7-м месте, им будет присвоено значение 7,5)

  • «min»: возвращает наименьший ранг в группе и присваивает его каждому значению.

  • «max»: возвращает наивысший ранг в группе и присваивает его каждому значению.

  • «первый»: ранги присваиваются в порядке их появления в датафрейме.

  • «dense»: аналогичен методу «min», но ранг всегда увеличивается на 1

На первый взгляд, эти значения могут показаться не самыми интуитивно понятными. Самый простой способ понять их — это создать рейтинги для каждого метода.

Давайте создадим Pandas dataframe с каждым методом ранжирования, чтобы лучше изучить аргумент.

# Изучение различных методов обработки дубликатов при ранжировании

df['Count_average'] = df['Count'].rank(method='average')  # Ранжирование с использованием среднего значения для дубликатов
df['Count_min'] = df['Count'].rank(method='min')        # Ранжирование с использованием минимального значения для дубликатов
df['Count_max'] = df['Count'].rank(method='max')        # Ранжирование с использованием максимального значения для дубликатов
df['Count_first'] = df['Count'].rank(method='first')      # Ранжирование с использованием порядка появления для дубликатов
df['Count_dense'] = df['Count'].rank(method='dense')      # Ранжирование без пропуска рангов для дубликатов

print(df)  # Вывод DataFrame с новыми столбцами рангов

# Результат:
#     Name  Count  Score  Score_Ranked  Score_Ranked_Asc  Score_Ranked_Desc  \
# 0   Nik    100     22           2.0               2.0                5.0   
# 1  Kate    100     33           3.0               3.0                4.0   
# 2  Evan    105     11           1.0               1.0                6.0   
# 3  Kyra     95     55           4.0               4.0                3.0   
# 4  Piet     75     77           5.0               5.0                2.0   
# 5  Maya    150     99           6.0               6.0                1.0   

#    Count_average  Count_min  Count_max  Count_first  Count_dense  
# 0            3.5        3.0        4.0          3.0          3.0  
# 1            3.5        3.0        4.0          4.0          3.0  
# 2            5.0        5.0        5.0          5.0          4.0  
# 3            2.0        2.0        2.0          2.0          2.0  
# 4            1.0        1.0        1.0          1.0          1.0  
# 5            6.0        6.0        6.0          6.0          5.0 

В приведенном выше примере датафрейма мы можем увидеть нюансы различных методов ранжирования данных.

В следующем разделе вы узнаете, как ранжировать данные в группе.

Pandas Rank Dataframe с Groupby (группированные рейтинги)

Отличное применение метода Pandas .rank() заключается в возможности его применения к группе. Это имеет множество практических применений, таких как возможность выбора наименьшего или наибольшего значения за определённый день.

Для этого примера давайте загрузим другой датафрейм

# Загрузка другого примера DataFrame

import pandas as pd

# Создание DataFrame из словаря
df = pd.DataFrame.from_dict({
    'Date': ['2021-12-01', '2021-12-01', '2021-12-01', '2021-12-02', '2021-12-02'],  # Даты продаж
    'Salesperson': ['Nik', 'Kate', 'Evan', 'Nik', 'Kate'],  # Имена продавцов
    'Sales': [100, 105, 110, 95, 130]  # Объемы продаж
})

print(df)  # Вывод DataFrame

# Результат:
#          Date Salesperson  Sales
# 0  2021-12-01         Nik    100
# 1  2021-12-01        Kate    105
# 2  2021-12-01        Evan    110
# 3  2021-12-02         Nik     95
# 4  2021-12-02        Kate    130

Давайте посмотрим, как мы можем сгруппировать наши данные по дате и затем ранжировать по столбцу "

# Ранжирование столбца на основе группировки другого столбца в Pandas

import pandas as pd

# Создание DataFrame из словаря
df = pd.DataFrame.from_dict({
    'Date': ['2021-12-01', '2021-12-01', '2021-12-01', '2021-12-02', '2021-12-02'],  # Даты продаж
    'Salesperson': ['Nik', 'Kate', 'Evan', 'Nik', 'Kate'],  # Имена продавцов
    'Sales': [100, 105, 110, 95, 130]  # Объемы продаж
})

# Ранжирование столбца 'Sales' по группам дат, в порядке убывания
df['Sales Ranked by Date'] = df.groupby('Date')['Sales'].rank(ascending=False)

print(df)  # Вывод DataFrame с новым столбцом рангов

# Результат:
#          Date Salesperson  Sales  Sales Ranked by Date
# 0  2021-12-01         Nik    100                   3.0
# 1  2021-12-01        Kate    105                   2.0
# 2  2021-12-01        Evan    110                   1.0
# 3  2021-12-02         Nik     95                   2.0
# 4  2021-12-02        Kate    130                   1.0

Это более сложный пример – давайте разберём, что мы сделали здесь:

  1. Мы добавили новый столбец для ранжирования наших продаж по дате

  2. Этот столбец основывается на группировке наших данных сначала по Дате, а затем выбором только столбца Продажи.

  3. Затем мы ранжируем этот результирующий сгруппированный столбец в порядке убывания.

Давайте посмотрим, как мы можем

# Выбор только верхних значений группировки

df['Sales Ranked by Date'] = df.groupby('Date')['Sales'].rank(ascending=False)  # Ранжирование продаж по датам, по убыванию

df = df[df['Sales Ranked by Date'] == 1.0]  # Фильтрация DataFrame, оставляя только строки с рангом 1.0 (наивысшие продажи в каждой группе)

print(df)  # Вывод отфильтрованного DataFrame

# Результат:
#          Date Salesperson  Sales  Sales Ranked by Date
# 2  2021-12-01        Evan    110                   1.0
# 4  2021-12-02        Kate    130                   1.0

При фильтрации Pandas DataFrame мы можем легко увидеть лучшего продавца по дате

В следующем разделе вы узнаете, как выполнить ранжирование вашего датафрейма Pandas с использованием процентов, что означает нормализованное ранжирование.

Pandas Rank Dataframe с процентами (нормализованные рейтинги)

Ещё одно замечательное свойство метода .rank() в Pandas заключается в том, что мы можем нормализовать наши рейтинги до значений между 0 и 1. Хотя это может показаться незначительным, оно позволяет сравнивать минимальные и максимальные рейтинги в разных столбцах, даже если в них различное количество уникальных значений.

Мы можем применить нормализованную версию ранжирования с помощью аргумента pct=. Давайте посмотрим, как мы можем применить это в Python и Pandas:

# Ранжирование DataFrame с использованием нормализованных рангов

df = df.rank(pct=True)  # Ранжирование DataFrame с использованием процентных рангов (нормализация)

print(df)  # Вывод DataFrame с нормализованными рангами

# Результат:
#        Name     Count  Score
# 0  0.833333  0.583333    0.4
# 1  0.333333  0.583333    0.6
# 2  0.166667  0.833333    0.2
# 3  0.500000  0.250000    NaN
# 4  1.000000  0.250000    0.8
# 5  0.666667  1.000000    1.0

Мы видим, что ранги всех столбцов не превышают 1. Когда мы изменяем другие параметры, как показано выше, мы можем изменять шаг через схожие значения.

В последнем разделе ниже вы узнаете, как сортировать только числовые столбцы в датафрейме Pandas.

Pandas ранжирует только числовые столбцы в Dataframe

При ранжировании всего датафрейма вы можете захотеть исключить ранжирование нечисловых столбцов. Это связано с тем, что ранжирование на основе алфавитной сортировки не имеет такого же значения, как ранжирование числовых столбцов.

Давайте посмотрим, как мы можем использовать аргумент numeric_only=, чтобы ранжировать только числовые столбцы

# Ранжирование только числовых столбцов с помощью Pandas .rank()

df = df.rank(numeric_only=True)  # Ранжирование только числовых столбцов DataFrame

print(df)  # Вывод DataFrame с ранжированными числовыми столбцами

# Результат:
#    Count  Score
# 0    3.5    2.0
# 1    3.5    3.0
# 2    5.0    1.0
# 3    1.5    NaN
# 4    1.5    4.0
# 5    6.0    5.0

Мы можем видеть, что когда мы просим Pandas ранжировать только числовые столбцы, он не возвращает ни один из нечисловых столбцов.

Заключение

В этом руководстве вы научились использовать метод .rank() для ранжирования данных в Pandas. Вы узнали, как ранжировать отдельный столбец или весь датафрейм. Вы также узнали, как изменить порядок сортировки и как ранжировать с использованием различных методов, включая нормализованное ранжирование (пропорциональное из 1). Наконец, вы узнали, как ранжировать датафрейм Pandas, когда данные сгруппированы с помощью метода .groupby(), а также как ограничить ранжирование только числовыми столбцами.

Хотите узнать, как использовать функцию zip() в Python для итерации по двум спискам? объясняет, что делает функция zip(), и предлагает несколько творческих способов её использования.

Из этого легко выбрать лучшего продавца по дате, отфильтровав наш dataframe Pandas. Чтобы узнать больше о выборе данных в Pandas, .

Чтобы узнать больше о методе .rank() в Pandas, .

Этот учебник
ознакомьтесь с моим руководством здесь
ознакомьтесь с официальной документацией здесь
Понимание метода ранжирования Pandas
Загрузка образца Pandas Dataframe
Базовый рейтинг вашего фреймворка данных Pandas
Pandas Rank Dataframe с обратным порядком сортировки
Pandas ранжирует Dataframe разными методами
Pandas Rank Dataframe с Groupby (группированные рейтинги)
Pandas Rank Dataframe с процентами (нормализованные рейтинги)
Pandas ранжирует только числовые столбцы в Dataframe
Заключение