熊猫.cut #

熊猫。cut ( x , bins , right = True , labels = None , retbins = False , precision = 3 , include_lowest = False ,重复项= 'raise' , ordered = True ) [来源] #

将值分入离散区间。

当您需要将数据值分段并排序到容器中时,请使用cut 。此函数对于从连续变量到分类变量也很有用。例如,cut可以将年龄转换为年龄范围组。支持分入相同数量的分箱或预先指定的分箱数组。

参数
x类数组

要合并的输入数组。必须是一维的。

bins int、标量序列或 IntervalIndex

分类的标准。

  • int :定义x范围内等宽 bin 的数量。x的范围在每一侧扩展 0.1%,以包括x的最小值和最大值。

  • 标量序列:定义允许不均匀宽度的箱边缘。没有进行x范围的扩展。

  • IntervalIndex :定义要使用的确切 bin。请注意, bin的 IntervalIndex必须不重叠。

布尔值,默认 True

指示bin是否包含最右边缘。如果 (默认),则bin表示 (1,2]、(2,3]、(3,4])。当bins是 IntervalIndex 时,将忽略此参数 。right == True [1, 2, 3, 4]

labels数组或 False,默认 None

指定返回垃圾箱的标签。必须与生成的 bin 的长度相同。如果为 False,则仅返回 bin 的整数指示符。这会影响输出容器的类型(见下文)。当bins是 IntervalIndex时,该参数被忽略。如果为 True,则会引发错误。当ordered=False时,必须提供标签。

retbins bool, 默认 False

是否归还垃圾箱。当 bin 作为标量提供时很有用。

精度int,默认 3

存储和显示容器标签的精度。

include_lowest布尔值,默认 False

第一个间隔是否应包含左值。

重复项{默认 'raise', 'drop'},可选

如果 bin 边缘不唯一,则引发 ValueError 或丢弃非唯一值。

有序布尔值,默认 True

标签是否有序。适用于返回类型 Categorical 和 Series(带有 Categorical dtype)。如果为 True,则结果分类将被排序。如果为 False,则生成的分类将是无序的(必须提供标签)。

返回
out分类、​​系列或 ndarray

一个类似数组的对象,表示x的每个值各自的 bin 。类型取决于labels的值。

  • None(默认):返回系列x的系列或所有其他输入的分类。其中存储的值是 Interval dtype。

  • 标量序列:返回系列x的系列或所有其他输入的分类。无论序列中的类型是什么,其中存储的值都是。

  • False :返回整数 ndarray。

bins numpy.ndarray 或 IntervalIndex。

计算的或指定的箱。仅当retbins=True时返回。对于标量或序列bin,这是一个带有计算出的 bin 的 ndarray 。如果设置duplicates=dropbins将删除非唯一的bin。对于 IntervalIndex bins,这等于bins

也可以看看

qcut

根据排名或样本分位数将变量离散化为大小相等的桶。

Categorical

用于存储来自一组固定值的数据的数组类型。

Series

带有轴标签的一维数组(包括时间序列)。

IntervalIndex

不可变索引实现有序、可切片集。

笔记

任何 NA 值在结果中都将为 NA。在生成的系列或分类对象中,超出范围的值将为 NA。

请参阅用户指南以获取更多示例。

例子

离散成三个大小相等的箱。

>>> 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 作为输入传递会返回具有分类 dtype 的 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, ...

将系列作为输入传递会返回带有映射值的系列。它用于以数字方式映射到基于箱的间隔。

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

当 bin 不唯一时使用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]))

为bin传递 IntervalIndex会准确地得出这些类别。请注意,IntervalIndex 未涵盖的值设置为 NaN。 0 位于第一个 bin 的左侧(右侧关闭),1.5 位于两个 bin 之间。

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