Графический ранговый механизм панд

pandas
Графический ранговый механизм панд

Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер

Всем привет, меня зовут Питер~

В нашей жизни мы часто сталкиваемся с различными проблемами ранжирования: рейтинг успеваемости студентов, рейтинг продаж, различные рейтинги конкурентов и т. д. В предыдущей статье о SQL — «Основы интервью: ранжирование SQL и оконные функции» я упомянул, как использовать SQL для достижения 3 основных методов ранжирования: последовательное ранжирование, ранжирование с переходом и плотное ранжирование.

Pandas, мощная библиотека анализа данных, также может быстро реализовать различные методы ранжирования, в основном с помощью функции ранжирования.Эта статья объяснит на нескольких примерах.

Параметр ранга

Ниже приведены основные параметры ранговой функции:

DataFrame.rank(axis=0, 
               method='average', 
               numeric_only=None, 
               na_option='keep', 
               ascending=True, 
               pct=False)

Конкретное объяснение параметров:

  • ось: указывает, на какой оси основано ранжирование, ось = 0 указывает на горизонтальную ось, ось = 1 указывает на вертикальную ось
  • метод: значение может быть "среднее", "первое", "минимальное", "максимальное", "плотное"; фокус будет введен позже, значение по умолчанию - среднее
  • numeric_only: считать ли только числовые столбцы
  • na_option: Участвует ли значение NaN в ранжировании и как его ранжировать, значения сохраняются, верхние, нижние
  • по возрастанию: по возрастанию или по убыванию; по умолчанию - по возрастанию
  • pct: отображать ли рейтинг в процентах от рейтинга; процент от всех рейтингов и наибольший рейтинг

В этой статье объясняется использование функции ранжирования в типах данных Series и DataFrame.

Рейтинг серии

import pandas as pd
import numpy as np

Сначала мы моделируем простые данные:

метод параметра

1. Метод ранжирования по умолчанию = "средний":

2. метод = "первый"

Значения ранжируются в соответствии с порядком их появления в исходных данных, а ранжирование одного и того же значения увеличивается на 1:

Объясните два приведенных выше результата:

  • во-первых: ранжировать непосредственно в соответствии с числовым порядком величины
  • среднее: означает, что если два значения одинаковы, ранжирование является их средним

Мы видим, что использование первого — это ранг, в котором значения появляются в естественном порядке, в случае использования среднего объяснение следующее:

-5 имеет рейтинг 1,0, 0 имеет рейтинг 2,0, 3 имеет рейтинг 3,0, 5 (позиция индекса 3) имеет рейтинг 4,0, 5 (позиция индекса 6) имеет рейтинг 5,0, 8 (позиция индекса 0) имеет рейтинг 6,0 и 8 (индекс 2) 7.0

За счет использования среднего значения ранжирования с таким же значением будет исключенозначит, рейтинг 5 объединен в 4,5, а рейтинг 8 объединен в 6,5

3. Использование максимума и минимума

Например, когда: method= "max": Если значения совпадают, берется ранг с наибольшим значением. Например, наибольший ранг числа 5 равен 5, поэтому ранжирование двух пятерок в исходных данных равно 5; ранжирование двух восьмерок равно 7 (два ранга 8 равны 6 и 7, в зависимости от того, какое значение больше 7).

4. метод = "плотный"

Одно и то же значение ранжируется одинаково, ранжирование следующего значениянет прыжка

В настоящее время не будет прыжков при ранжировании.

параметр по возрастанию

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

Ранжирование 8 в значении, если метод = "первый", ранжирование равно 1 и 2, если используется среднее значение, ранжирование станет 1,5; другие числовые ранжирования аналогичны. Давайте снова посмотрим на случай max:

параметр проц

Отображать ли рейтинги в процентах от рейтинга; процент от всех рейтингов и наибольший рейтинг

Как рассчитываются приведенные выше рейтинги? Наш самый большой ранг — 7:

В другом примере параметр pct в случае плотности аналогичен:

Параметр na_option

Этот параметр указывает, участвует ли в ранжировании значение null, а значения — keep, top, bottom. Давайте смоделируем другие данные с нулевыми значениями:

Посмотрите на 3 разные ситуации:

Ранжирование DataFrame

Данные моделирования

Или сначала смоделируйте данные:

df0 = pd.DataFrame({"科目":["语文","语文","语文","语文","语文","数学","数学","数学","数学","数学"],
                  "姓名":["小明","小苏","小周","小孙","小王","小明","小苏","小周","小孙","小王"],
                  "分数":[137,125,125,115,115,80,111,130,130,140]})

df = df0.copy()   # 生成一个副本df
df

Индивидуальный предметный рейтинг

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

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

# 默认排名方式

df1["均值排名_默认"] = df1["分数"].rank(ascending=False)
df1["跳跃排名_min"] = df1["分数"].rank(method="min",ascending=False)
df1["跳跃_max"] = df1["分数"].rank(method="max",ascending=False)
df1["密集排名_dense"] = df1["分数"].rank(method="dense",ascending=False)

df1

Рейтинг студентов по общему баллу

Сначала сгенерируйте общий балл каждого ученика с помощью преобразования:

df["总分"] = df.groupby("姓名")["分数"].transform("sum")
df

Мы ранжируем общий балл, используя плотное ранжирование:

Группа для получения указанного рейтинга

Теперь мы видим учащегося, занявшего второе место по каждому предмету, и если оценки одинаковые, один и тот же ранг (без скачков), мы используем плотное ранжирование:

# 定义一个排名第二的函数

def rank_second(x):
    return x[x["分数"].rank(method="dense",ascending=False) == 2]

Посмотрим на второго ученика по каждому предмету в реальных данных:

Настроенная выше функция второго ранга разделена на два этапа;

1. Сначала достигните интенсивного рейтинга

2. Указанный ранг равен 2

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

Суммировать

После объяснения использования функции rank ее можно сравнить с оконной функцией в SQL:

  • row_number: последовательное ранжирование, метод=первый в функции ранжирования
  • ранг: рейтинг прыжков, метод=мин в функции ранга
  • плотное ранжирование: плотное ранжирование, method=dense в функции ранжирования

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

pandas друг ударил его.org/docs/refer E…