To begin, note that quantiles is just the most general term for things like percentiles, quartiles, and medians. You specified five bins in your example, so you are asking qcut for quintiles.

因此,当你要求五分位数与 qcut,垃圾桶将被选择,以便您有相同的记录在每个垃圾桶数量。您有30条记录,因此每个容器中应该有6条记录(您的输出应该是这样的,尽管由于随机抽取的原因,断点会有所不同) :

pd.qcut(factors, 5).value_counts()


[-2.578, -0.829]    6
(-0.829, -0.36]     6
(-0.36, 0.366]      6
(0.366, 0.868]      6
(0.868, 2.617]      6

相反,对于 cut,你会看到更不均衡的情况:

pd.cut(factors, 5).value_counts()


(-2.583, -1.539]    5
(-1.539, -0.5]      5
(-0.5, 0.539]       9
(0.539, 1.578]      9
(1.578, 2.617]      2

这是因为 cut将根据这些值本身而不是这些值的 频率来选择均匀间隔的容器。因此,因为你从一个随机的正常,你会看到较高的频率在内部箱和较少在外部。这基本上将是一个直方图的表格形式(你可能会认为这是一个相当钟形的30条记录)。

因此,qcut 确保了每个容器中的值的更均匀分布,即使它们聚集在样本空间中。这意味着不太可能有一个装满非常接近值的数据的容器和另一个装满0值的容器。一般来说,取样更好。

  • 削减命令创建 等间隔的箱子但样品的频率 在每个箱子里是 不等的
  • qcut command creates unequal size bins but frequency of samples is equal 每个箱子里

enter image description here

    >>> x=np.array([24,  7,  2, 25, 22, 29])
>>> x
array([24,  7,  2, 25, 22, 29])


>>> pd.cut(x,3).value_counts() #Bins size has equal interval of 9
(2, 11.0]        2
(11.0, 20.0]     0
(20.0, 29.0]     4


>>> pd.qcut(x,3).value_counts() #Equal frequecy of 2 in each bins
(1.999, 17.0]     2
(17.0, 24.333]    2
(24.333, 29.0]    2

Qcut 根据((数组中元素的数目)/(数组中元素的数目)分配数组的元素。1)) ,然后除以这么多不。每个箱子里的元素按顺序排列。

在((1 + 最后一个元素)/(0。) ,然后根据元素落入的值范围分配元素。