Spec-Zone.ru › pandas 1

pandas.cut

pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', ordered=True)[source]

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

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

Параметры
x:array-like

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

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

Критерии разбиения.

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

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

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

right:bool, по умолчанию True

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

labels:массив или False, по умолчанию None

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

retbins:bool, по умолчанию False

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

precision:int, по умолчанию 3

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

include_lowest:bool, по умолчанию False

Первый интервал должен быть включительно слева или нет.

duplicates:{по умолчанию ‘raise’, ‘drop’}, необязательно

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

ordered:bool, по умолчанию True

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

Добавлена в версии 1.1.0.

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

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

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

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

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

bins:numpy.ndarray или IntervalIndex.

Вычисленные или заданные интервалы. Возвращается только когда retbins=True. Для скалярного или последовательного bins это массив с вычисленными интервалами. Если установлен 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 являются 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']

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 с типом данных categorical:

>>> 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, если интервалы не уникальны.

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

© 2008–2022, 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/1.5.0/reference/api/pandas.cut.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API