传递 pd.qcut 重复项='drop' kwarg 后,“bin 标签必须比 bin 边缘数少 1”

MSD*_*MSD 11 python pandas

我有数df十万行,并且正在创建一个新的数据框,其中仅包含某些值组的行的顶部分位数:

quantiles = (df.groupby(['Person', 'Date'])['Value'].apply(lambda x: pd.qcut(x, 4, labels=[0, 0.25, 0.5, 1], duplicates='drop')))
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到:

ValueError: Bin labels must be one fewer than the number of bin edges
Run Code Online (Sandbox Code Playgroud)

尝试更改binsto的数量后5,我仍然收到相同的错误。

我怎样才能解决这个问题?

小智 7

我面临着同样的问题,我这样做是为了克服它。

bins = 数据被切片的次数

labels = 您使用标签分类的范围。

当标签 > 垃圾箱时出现此错误

按着这些次序:

步。1:一开始不要传递标签

train['MasVnrArea'] = pd.qcut(train['MasVnrArea'],
                          q=5,duplicates='drop')
Run Code Online (Sandbox Code Playgroud)

这将导致:

(-0.001, 16.0]     880
(205.2, 1600.0]    292
(16.0, 205.2]      288
Name: MasVnrArea, dtype: int64
Run Code Online (Sandbox Code Playgroud)

第2步:

现在我们可以看到,binned 上只能包含三个类别。因此,相应地分配标签。就我而言,它是 3。所以我传递了 3 个标签。

bin_labels_MasVnrArea = ['Platinum_MasVnrArea', 
                         'Diamond_MasVnrArea','Supreme_MasVnrArea']
train['MasVnrArea'] = pd.qcut(train['MasVnrArea'],
                              q=5,labels=bin_labels_MasVnrArea,duplicates='drop')
Run Code Online (Sandbox Code Playgroud)

请观看有关垃圾箱的视频以获得清晰的了解。

https://www.youtube.com/watch?v=HofOMf8RgjM
Run Code Online (Sandbox Code Playgroud)