pandas.cut
-
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')[source] -
Разбиение значений на дискретные интервалы.
Используется
cutкогда необходимо разбить и отсортировать значения данных по интервалам. Эта функция также полезна для преобразования непрерывной переменной в категориальную. Например,cutможет преобразовать возраст в группы возрастных диапазонов. Поддерживает разбиение на равное число интервалов или на предварительно заданный массив интервалов.Параметры: -
x : array-like -
Входной массив для разбиения. Должен быть одномерным.
-
bins : int, sequence of scalars, or IntervalIndex -
Критерии для разбиения.
- int: Определяет количество равномерных интервалов в диапазоне
x. Диапазонxрасширяется на 0,1% с каждой стороны, чтобы включить минимальное и максимальное значенияx. - последовательность скаляров: определяет границы интервалов, позволяющие иметь неравномерную ширину. Расширение диапазона
xне выполняется. - IntervalIndex: Определяет точные интервалы, которые будут использоваться. Обратите внимание, что IntervalIndex для
binsдолжен быть непересекающимся.
- int: Определяет количество равномерных интервалов в диапазоне
-
right : bool, default True -
Указывает, включает ли
binsправую границу или нет. Еслиright == True(по умолчанию), тоbins[1, 2, 3, 4]обозначают (1,2], (2,3], (3,4]. Этот аргумент игнорируется, когдаbinsявляется IntervalIndex. -
labels : array or bool, optional -
Указывает метки для возвращаемых интервалов. Должен иметь такую же длину, как и возвращаемые интервалы. Если False, возвращает только целочисленные индикаторы интервалов. Это влияет на тип выходного контейнера (см. ниже). Этот аргумент игнорируется, когда
binsявляется IntervalIndex. -
retbins : bool, default False -
Возвращать интервалы или нет. Полезно, когда bins задан как скаляр.
-
precision : int, default 3 -
Точность хранения и отображения меток интервалов.
-
include_lowest : bool, default False -
Первый интервал должен быть лево-включительно или нет.
-
duplicates : {default ‘raise’, ‘drop’}, optional -
Если границы интервалов не уникальны, вызывается ValueError или дубликаты отбрасываются.
Новое в версии 0.23.0.
Возвращает: -
out : Categorical, Series, or ndarray -
Объект типа массива, представляющий соответствующий интервал для каждого значения
x. Тип зависит от значенияlabels.- True (по умолчанию): возвращает Series для Series
xили Categorical для всех других входных данных. Значения хранятся в типе Interval. - последовательность скаляров: возвращает Series для Series
xили Categorical для всех других входных данных. Значения хранятся в типе соответствующей последовательности. - False: возвращает одномерный массив целых чисел.
- True (по умолчанию): возвращает Series для Series
-
bins : numpy.ndarray or IntervalIndex. -
Вычисленные или заданные интервалы. Возвращаются только когда
retbins=True. Для скаляра или последовательностиbins, это массив с вычисленными интервалами. Если установленоduplicates=drop,binsотбросит не уникальные интервалы. Для IntervalIndexbins, это равноbins.
См. также
-
qcut - Дискретизация переменной на равные по размеру интервалы на основе ранга или на основе выборочных квантилей.
-
Categorical - Тип массива для хранения данных из фиксированного набора значений.
-
Series - Одномерный массив с метками осей (включая временные ряды).
-
IntervalIndex - Неизменяемый индекс, реализующий упорядоченный, разрезаемый набор.
Примечания
Любые значения NA будут NA в результате. Значения за пределами границ интервалов будут NA в результирующей Series или Categorical.
Примеры
Разбиение на три равных интервала.
>>> pd.cut(np.array([1, 7, 5, 4, 6, 3]), 3) ... # doctest: +ELLIPSIS [(0.994, 3.0], (5.0, 7.0], (3.0, 5.0], (3.0, 5.0], (5.0, 7.0], ... Categories (3, interval[float64]): [(0.994, 3.0] < (3.0, 5.0] ...
>>> pd.cut(np.array([1, 7, 5, 4, 6, 3]), 3, retbins=True) ... # doctest: +ELLIPSIS ([(0.994, 3.0], (5.0, 7.0], (3.0, 5.0], (3.0, 5.0], (5.0, 7.0], ... Categories (3, interval[float64]): [(0.994, 3.0] < (3.0, 5.0] ... array([0.994, 3. , 5. , 7. ]))
Получение тех же интервалов, но с присвоением конкретных меток. Обратите внимание, что категории возвращаемого Categorical — это
labelsи он упорядочен.>>> 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]
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) ... # doctest: +ELLIPSIS 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]): [(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) ... # doctest: +ELLIPSIS (a 0.0 b 1.0 c 2.0 d 3.0 e 4.0 dtype: float64, array([0, 2, 4, 6, 8]))
Используйте
dropопцию, когда bins не уникальны>>> pd.cut(s, [0, 2, 4, 6, 10, 10], labels=False, retbins=True, ... right=False, duplicates='drop') ... # doctest: +ELLIPSIS (a 0.0 b 1.0 c 2.0 d 3.0 e 3.0 dtype: float64, array([0, 2, 4, 6, 8]))
Передача 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, 1], NaN, (2, 3], (4, 5]] Categories (3, interval[int64]): [(0, 1] < (2, 3] < (4, 5]]
-
© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.25.0/reference/api/pandas.cut.html