pandas.cut#

pandas.cut(x, bins, правый=True, метки=None, retbins=False, точность=3, include_lowest=False, дубликаты='raise', ordered=True)[источник]#

Разбить значения на дискретные интервалы.

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

Параметры:
xarray-like

Входной массив для бинирования. Должен быть одномерным.

binsint, последовательность скаляров или IntervalIndex

Критерий для группировки.

  • int : Определяет количество равных по ширине бинов в диапазоне x. Диапазон x расширяется на 0.1% с каждой стороны, чтобы включить минимальные и максимальные значения x.

  • последовательность скаляров : Определяет границы бинов, позволяя неравномерную ширину. Без расширения диапазона x выполнено.

  • IntervalIndex : Определяет точные бины для использования. Обратите внимание, что IntervalIndex для bins должны быть неперекрывающимися.

правыйbool, по умолчанию True

Указывает, является ли bins включает правую границу или нет. Если right == True (по умолчанию), тогда bins [1, 2, 3, 4] указывают (1,2], (2,3], (3,4]. Этот аргумент игнорируется, когда bins является IntervalIndex.

меткимассив или False, по умолчанию None

Задает метки для возвращаемых интервалов. Должны быть той же длины, что и результирующие интервалы. Если False, возвращает только целочисленные индикаторы интервалов. Это влияет на тип выходного контейнера (см. ниже). Этот аргумент игнорируется, когда bins является IntervalIndex. Если True, вызывает ошибку. Когда ordered=False, метки должны быть предоставлены.

retbinsbool, по умолчанию False

Возвращать ли границы интервалов или нет. Полезно, когда bins предоставлен как скаляр.

точностьint, по умолчанию 3

Точность, с которой хранятся и отображаются метки бинов.

include_lowestbool, по умолчанию False

Должен ли первый интервал быть лево-включительным или нет.

дубликаты{по умолчанию 'raise', 'drop'}, опционально

Если границы интервалов не уникальны, вызвать ValueError или удалить неуникальные.

orderedbool, по умолчанию True

Упорядочены ли метки или нет. Применяется к возвращаемым типам Categorical и Series (с типом Categorical). Если True, результирующая категориальная переменная будет упорядоченной. Если False, результирующая категориальная переменная будет неупорядоченной (метки должны быть предоставлены).

Возвращает:
выходCategorical, Series или ndarray

Объект, подобный массиву, представляющий соответствующий бин для каждого значения из x. Тип зависит от значения метки.

  • None (по умолчанию): возвращает Series для Series x или Categorical для всех других входных данных. Хранимые значения имеют тип данных Interval.

  • последовательность скаляров: возвращает Series для Series x или Categorical для всех других входных данных. Значения, хранящиеся внутри, имеют тот же тип, что и в последовательности.

  • False : возвращает ndarray целых чисел.

binsnumpy.ndarray или IntervalIndex.

Вычисленные или указанные интервалы. Возвращается только когда retbins=True. Для скаляра или последовательности bins, это ndarray с вычисленными корзинами. Если установлено duplicates=drop, bins удалит неуникальный интервал. Для IntervalIndex bins, это равно bins.

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

qcut

Дискретизация переменной в равные по размеру сегменты на основе ранга или выборочных квантилей.

Categorical

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

Series

Одномерный массив с метками осей (включая временные ряды).

IntervalIndex

Неизменяемый индекс, реализующий упорядоченный, срезаемый набор.

Примечания

Любые значения NA будут NA в результате. Значения вне диапазона будут NA в результирующем Series или Categorical объекте.

Ссылка руководство пользователя для дополнительных примеров.

Примеры

Дискретизация в три равных по размеру бина.

>>> pd.cut(np.array([1, 7, 5, 4, 6, 3]), 3)
... 
[(0.994, 3.0], (5.0, 7.0], (3.0, 5.0], (3.0, 5.0], (5.0, 7.0], ...
Categories (3, interval[float64, right]): [(0.994, 3.0] < (3.0, 5.0] ...
>>> pd.cut(np.array([1, 7, 5, 4, 6, 3]), 3, retbins=True)
... 
([(0.994, 3.0], (5.0, 7.0], (3.0, 5.0], (3.0, 5.0], (5.0, 7.0], ...
Categories (3, interval[float64, right]): [(0.994, 3.0] < (3.0, 5.0] ...
array([0.994, 3.   , 5.   , 7.   ]))

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

>>> pd.cut(np.array([1, 7, 5, 4, 6, 3]),
...        3, labels=["bad", "medium", "good"])
['bad', 'good', 'medium', 'medium', 'good', 'bad']
Categories (3, object): ['bad' < 'medium' < 'good']

ordered=False приведет к неупорядоченным категориям при передаче меток. Этот параметр можно использовать для разрешения неуникальных меток:

>>> pd.cut(np.array([1, 7, 5, 4, 6, 3]), 3,
...        labels=["B", "A", "B"], ordered=False)
['B', 'B', 'A', 'A', 'B', 'B']
Categories (2, object): ['A', 'B']

labels=False подразумевает, что вы хотите получить только интервалы.

>>> pd.cut([0, 1, 1, 2], bins=4, labels=False)
array([0, 1, 1, 3])

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

>>> s = pd.Series(np.array([2, 4, 6, 8, 10]),
...               index=['a', 'b', 'c', 'd', 'e'])
>>> pd.cut(s, 3)
... 
a    (1.992, 4.667]
b    (1.992, 4.667]
c    (4.667, 7.333]
d     (7.333, 10.0]
e     (7.333, 10.0]
dtype: category
Categories (3, interval[float64, right]): [(1.992, 4.667] < (4.667, ...

Передача Series в качестве входных данных возвращает Series с отображенным значением. Используется для числового отображения на интервалы на основе бинов.

>>> s = pd.Series(np.array([2, 4, 6, 8, 10]),
...               index=['a', 'b', 'c', 'd', 'e'])
>>> pd.cut(s, [0, 2, 4, 6, 8, 10], labels=False, retbins=True, right=False)
... 
(a    1.0
 b    2.0
 c    3.0
 d    4.0
 e    NaN
 dtype: float64,
 array([ 0,  2,  4,  6,  8, 10]))

Используйте drop необязательно, если bins не уникален

>>> pd.cut(s, [0, 2, 4, 6, 10, 10], labels=False, retbins=True,
...        right=False, duplicates='drop')
... 
(a    1.0
 b    2.0
 c    3.0
 d    3.0
 e    NaN
 dtype: float64,
 array([ 0,  2,  4,  6, 10]))

Передача IntervalIndex для bins приводит к этим категориям точно. Обратите внимание, что значения, не покрываемые IntervalIndex, устанавливаются в NaN. 0 находится слева от первого бина (который закрыт справа), а 1.5 попадает между двумя бинами.

>>> bins = pd.IntervalIndex.from_tuples([(0, 1), (2, 3), (4, 5)])
>>> pd.cut([0, 0.5, 1.5, 2.5, 4.5], bins)
[NaN, (0.0, 1.0], NaN, (2.0, 3.0], (4.0, 5.0]]
Categories (3, interval[int64, right]): [(0, 1] < (2, 3] < (4, 5]]