请帮我将数据集分成样本数量相等的5个容器 我使用:
pd.qcut(df[i], q=5, precision = 0, duplicates = 'drop')
因为它不仅按bin分割,而且将范围值放入单元格中。
如果我的数据呈正态分布,它将为我提供正确的结果。
但是,如果我的分布偏斜(例如,从10000个示例中,我有4000个范围为(0,.99)的示例,而6000个示例为'1'(请参见下图):
它给了我<5个(有时1个)垃圾箱。
我尝试手动计算最佳垃圾箱百分比范围,但这很烦人:
if len(pd.qcut(df[i], q=q_r, precision = 0, duplicates = 'drop').value_counts()) < 5:
mean = df[i].describe()[2]
median = df[i].describe()[6]
if mean < median:
q_r = [0, .125, .25, .375, .5, 1]
if len(pd.qcut(df[i], q=q_r, precision = 0, duplicates = 'drop').value_counts()) < 5:
q_r = [0, .05, .1, .15, .20, 1]
print(pd.qcut(df[i], q=q_r, precision = 0, duplicates = 'drop').value_counts()[0])
是否有某种方法来计算垃圾箱的百分位数范围(在我的代码中为q_r)? 真正删除重复项也会对我有帮助。但是重复项='丢弃'选项仅将重复项丢弃在垃圾箱的边缘。
pd.cut方法不适合,因为它会根据分布的最小值-最大值进行拆分:如果我们有1万个样本:1个样本= 1 000,则100个样本= 1,并且8900个样本= 0,它将创建5个相等的范围,范围从0到1000。
谢谢。