РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
346 of 687 menu

Функция qcut

Функция qcut применяется для дискретизации непрерывных данных с разбиением на интервалы равной частоты (квантили). В отличие от функции cut, где интервалы имеют равную ширину, qcut формирует интервалы таким образом, чтобы в каждый попадало примерно одинаковое количество наблюдений. Первым параметром передаётся массив или столбец Series, вторым параметром указывается количество интервалов (целое число) или список квантилей (от 0 до 1). Результатом работы является категориальный объект или Series с метками интервалов.

Синтаксис

pd.qcut(x, q, labels=None, retbins=False, duplicates='raise')

Основные параметры функции:

  • x - одномерный массив или Series для разбиения;
  • q - количество интервалов (целое число) или список квантилей (значения от 0 до 1);
  • labels - метки для интервалов (массив или False);
  • retbins - если True, возвращает также границы интервалов;
  • duplicates - управление обработкой дублирующихся границ.

Пример

Разобьём числовые данные на три интервала равной частоты:

import pandas as pd ser = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9]) res = pd.qcut(ser, q=3) print(res)

Результат выполнения кода:

0 (0.999, 3.667] 1 (0.999, 3.667] 2 (0.999, 3.667] 3 (3.667, 6.333] 4 (3.667, 6.333] 5 (3.667, 6.333] 6 (6.333, 9.0] 7 (6.333, 9.0] 8 (6.333, 9.0] dtype: category Categories (3, interval[float64, right]): [(0.999, 3.667] < (3.667, 6.333] < (6.333, 9.0]]

Пример

Получим метки категорий вместо интервалов. Для этого передадим список названий в параметр labels:

import pandas as pd ser = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9]) res = pd.qcut(ser, q=3, labels=['low', 'middle', 'high']) print(res)

Результат выполнения кода:

0 low 1 low 2 low 3 middle 4 middle 5 middle 6 high 7 high 8 high dtype: category Categories (3, object): ['low' < 'middle' < 'high']

Пример

Разобьём данные по заданным квантилям. Укажем границы в виде списка значений от 0 до 1:

import pandas as pd ser = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9]) res = pd.qcut(ser, q=[0, 0.25, 0.5, 0.75, 1.0]) print(res)

Результат выполнения кода:

0 (0.999, 3.0] 1 (0.999, 3.0] 2 (3.0, 5.0] 3 (3.0, 5.0] 4 (5.0, 7.0] 5 (5.0, 7.0] 6 (7.0, 9.0] 7 (7.0, 9.0] 8 (7.0, 9.0] dtype: category Categories (4, interval[float64, right]): [(0.999, 3.0] < (3.0, 5.0] < (5.0, 7.0] < (7.0, 9.0]]

Пример

Вернём не только категории, но и границы интервалов. Для этого установим retbins в значение True:

import pandas as pd ser = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9]) categories, bins = pd.qcut(ser, q=3, retbins=True) print("Categories:") print(categories) print("\nBin edges:") print(bins)

Результат выполнения кода:

Categories: 0 (0.999, 3.667] 1 (0.999, 3.667] 2 (0.999, 3.667] 3 (3.667, 6.333] 4 (3.667, 6.333] 5 (3.667, 6.333] 6 (6.333, 9.0] 7 (6.333, 9.0] 8 (6.333, 9.0] dtype: category Categories (3, interval[float64, right]): [(0.999, 3.667] < (3.667, 6.333] < (6.333, 9.0]] Bin edges: [0.999 3.667 6.333 9. ]

Пример

Применим qcut к столбцу таблицы DataFrame. Создадим новый столбец с категориями:

import pandas as pd df = pd.DataFrame({ 'a': [1, 2, 3, 4, 5], 'b': [10, 20, 30, 40, 50] }) df['a_cat'] = pd.qcut(df['a'], q=2, labels=['low', 'high']) print(df)

Результат выполнения кода:

a b a_cat 0 1 10 low 1 2 20 low 2 3 30 low 3 4 40 high 4 5 50 high

Смотрите также

  • функция cut,
    которая разбивает данные на интервалы равной ширины
  • функция pivot_table,
    которая создаёт сводную таблицу с группировкой
  • функция crosstab,
    которая строит таблицу сопряжённости
  • функция get_dummies,
    которая создаёт фиктивные переменные для категорий
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить