问题描述
ex = pd.Series([1,2,3,4,5,6,7,888,999])
现在,我想创建三个垃圾箱:
pd.cut(ex,labels=False)
这将导致三个bin,并将以下bin编号分配给该系列的每个元素:
[0,2]
现在,我希望具有bin边框,以使每个bin具有相等数量的元素(即3),并且将数据点分配到bin的外观应类似于:
[0,1,2]
我该如何得知?打破平局该怎么做(即,当数据点的数量不能除以箱的数量时)?
解决方法
使用-
pd.qcut(ex,3,labels=False)
输出
0 0
1 0
2 0
3 1
4 1
5 1
6 2
7 2
8 2
使用retbins=True
来获取垃圾箱。
pd.qcut(ex,labels=False,retbins=True)
输出
(0 0
1 0
2 0
3 1
4 1
5 1
6 2
7 2
8 2
dtype: int64,array([ 1.,3.66666667,6.33333333,999. ]))
,
请使用熊猫qcut函数。试试这个pd.qcut(ex,q=3,labels=False)
尝试
bins = ex.index//3 # np.arange(len(ex))//3
bins
Out[98]: Int64Index([0,1,2,2],dtype='int64')