我正在使用pandas pcut和somethimes(当大量数据等于min时)它返回错误:
Bin edges must be unique
或者我必须删除我得到的非唯一垃圾箱,但随后我的所有数据都在一个垃圾箱中。
例如: 数据集:
import pandas as pd
nbins = 2
pd.qcut([0,0,0,0,0,1,2,3], nbins)
我想要那些高于或低于中位数的地方(这里是0)。 然后我期待得到:
[grp1, grp1, grp1, grp1, grp1, grp2, grp2, grp2]
但是得到的是:
pd.qcut([0,0,0,0,0,1,2,3], 2)
out >>> ValueError: Bin edges must be unique: array([ 0., 0., 3.]).
如果我放弃非独特的垃圾箱:
pd.qcut([0,0,0,0,0,1,2,3], 2, duplicates='drop')
out >>> [(-0.001, 3.0], (-0.001, 3.0], (-0.001, 3.0], (-0.001, 3.0], (-0.001, 3.0], (-0.001, 3.0], (-0.001, 3.0], (-0.001, 3.0]]
Categories (1, interval[float64]): [(-0.001, 3.0]]
一切都只属于一个类别。
我不想具有+/-中位数,这只是数据聚集在最小值附近的一个例子。
感谢您的帮助
答案 0 :(得分:0)
我找到了一种非常难看的解决方法......:
try:
pd.qcut(data, n_bins)
except ValueError:
pd.qcut(data, n_bins+1, duplicates = 'drop')