Qcut Pandas:ValueError:箱边缘必须是唯一的。

5

我正在使用Pandas中的Qcut来将我的数据离散化为等大小的桶。我想要价格桶。这是我的DataFrame:

        productId   sell_prix   categ   popularity
11997   16758760.0  28.75        50      524137.0
11998   16758760.0  28.75        50      166795.0
13154   16782105.0  24.60        50      126890.5
13761   16790082.0  65.00        50      245437.0
13762   16790082.0  65.00        50      245242.0
15355   16792720.0  29.00        50      360219.0
15356   16792720.0  29.00        50      360100.0
15357   16792720.0  29.00        50      360027.0
15358   16792720.0  29.00        50      462850.0
15367   16792728.0  29.00        50      193030.5

这是我的代码:

而这是我的代码:

df['PriceBucket'] = pd.qcut(df['sell_prix'], 3)

我有一个错误信息:

我有这个错误信息:

**ValueError: Bin edges must be unique: array([ 24.6,  29. ,  29. ,  65. ])**

实际上,我有一个包含7413行的DataFrame。所以这只是真实DataFrame的一个样本。奇怪的是,当我使用包含359824行的DataFrame并且数据几乎相同的代码时,它可以正常工作! DataFrame的长度是否有任何关联?请帮忙!非常感谢。

如果您对df列进行排序,它是否有效?df['PriceBucket'] = pd.qcut(df['sell_prix'].sort_values(), 3) - EdChum
你的较小数据框中'sell_prix'没有足够的唯一值来将范围分成3个桶。因此,第一个和中间桶的端点相同,这就是为什么会出现错误的原因。 - Fortunato
请参见以下网站:https://dev59.com/i2Ij5IYBdhLWcg3wilgI?rq=1 - dukebody
1个回答

5

这里讨论了各种解决方案(链接),简要概括如下:

> pd.qcut(df['a'].rank(method='first'), 3)
0        [1, 2.333]
1        [1, 2.333]
2    (2.333, 3.667]
3        (3.667, 5]
4        (3.667, 5]

或者

> pd.qcut(df['a'].rank(method='first'), 3, labels=False)
0    0
1    0
2    1
3    2
4    2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接