pd.cut()与pd.qcut()的区别

cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False)
    需要将数据值分段并排序到bins中时使用cut。 此函数对于从连续变量转换为离散变量也很有用。 例如,cut可以将年龄转换为年龄范围组。 支持bins到相同数量的箱柜或预先指定的bins阵列。
x: 进行划分的一维数组
bins : 
1,整数---将x划分为多少个等间距的区间

In[1]:pd.cut(np.array([0.2,1.4,2.5,6.2,9.7,2.1]),3,retbins=True)
    Out[1]: ([(0.19, 3.367], (0.19, 3.367], (0.19, 3.367], (3.367,6.533], 
(6.533,9.7], (0.19, 3.367]] Categories (3, interval[float64]): 
[(0.19,3.367] < (3.367, 6.533] < (6.533, 9.7]],array([ 0.1905    , 3.36666667,  6.53333333,  9.7 ]))
​
print(pd.cut(np.array([0.2,1.4,2.5,6.2,9.7,2.1]),3,retbins=False))
# [(0.19, 3.367], (0.19, 3.367], (0.19, 3.367], (3.367, 6.533], (6.533, 9.7],
 (0.19, 3.367]]Categories (3, interval[float64]):
 [(0.19, 3.367] < (3.367, 6.533] < (6.533, 9.7]]
​
2,序列—将x划分在指定的序列中,若不在该序列中,则是NaN
In[2]:pd.cut(np.array([0.2,1.4,2.5,6.2,9.7,2.1]),[1,2,3],retbins=True)
    Out[2]: ([NaN, (1, 2], (2, 3], NaN, NaN, (2, 3]]
 Categories(2, interval[int64]): [(1, 2] < (2, 3]], array([1, 2, 3]))
right : 是否包含右端点
labels : 是否用标记来代替返回的bins

In[3]:pd.cut([1,2,3,4],4,labels=['one','two','three','four'])
    Out[3]: [one, two, three, four]
Categories (4, object): [one <two < three < four] 
retbins: 是否返回间距bins
precision: 精度
include_lowest:是否包含左端点
 
返回值:
 如果retbins = False 则返回x中每个值对应的bin的列表,否者则返回x中每个值对应的bin的列表和对应的bins
qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')
    基于分位数的离散化功能。 根据等级或基于样本分位数将变量分离为相等大小的桶。 例如,10个分位数的1000个值将产生一个分类对象,表示每个数据点的分位数成员资格。
两者的区别:

rng=np.random.RandomState(42)
factors = rng.randn(30)
print(factors)
print('='*30)
print(pd.cut(factors, 5).value_counts())
print('='*30)
print(pd.qcut(factors, 5).value_counts())
# (-1.917, -1.215]     4
# (-1.215, -0.516]     6
# (-0.516, 0.182]     10
# (0.182, 0.881]       7
# (0.881, 1.579]       3
# dtype: int64
# ==============================
# (-1.914, -0.929]     6
# (-0.929, -0.464]     6
# (-0.464, -0.0559]    6
# (-0.0559, 0.506]     6
# (0.506, 1.579]       6
# dtype: int64

首先是观察上面的数据, 先分析qcut()函数:qcut(factors, 5),当你用qcut求五分之一时,将选择这些规则选择bins:使你在每个bins里有相同数量的记录。 你有30个记录,所以每个bin应该有6个(你的输出应该是这样的,尽管断点会因随机抽取而不同).这样就是结果中每个分组里面均有6个数存在的原因。 cut()函数:因为cut()会根据值本身而不是这些值的频率选择均匀分布的bins(在本例中直接将bins分成5份)。 因此,因为随机生成一个正态分布数据,你会看到靠近均值bins中的频率更高,外部更少。 这基本上是一个直方图的表格形式。 从上面的分析即可得出qcut()和cut()的区别。

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值