python3:合并考虑偏斜分布

时间:2020-11-06 06:54:32

标签: python-3.x pandas distribution normal-distribution binning

请帮我将数据集分成样本数量相等的5个容器 我使用:

pd.qcut(df[i], q=5, precision = 0, duplicates = 'drop')

因为它不仅按bin分割,而且将范围值放入单元格中。

如果我的数据呈正态分布,它将为我提供正确的结果。 但是,如果我的分布偏斜(例如,从10000个示例中,我有4000个范围为(0,.99)的示例,而6000个示例为'1'(请参见下图): distribution 它给了我<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。

谢谢。

0 个答案:

没有答案