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, результирующий категориальный тип будет неупорядоченным (метки должны быть указаны).
- Возвращаемые значения:
-
- out:Categorical, Series или ndarray
-
Массивоподобный объект, представляющий соответствующий интервал для каждого значения x. Тип зависит от значения labels.
None (по умолчанию): возвращает Series для Series x или Categorical для всех других входных данных. Сохраненные значения имеют тип Interval.
последовательность скаляров: возвращает Series для Series x или Categorical для всех других входных данных. Сохраненные значения имеют тип, соответствующий типу в последовательности.
False : возвращает ndarray целых чисел.
- bins:numpy.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 являются 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 с типом данных категорий:
>>> 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/2.2.2/reference/api/pandas.cut.html