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]]