qcut 未找到分位数(我的 df 中重复了许多 0 和 1)

问题描述 投票:0回答:1

我的 df 有一列,其中

MAX_PERC
列的范围从 0 到 1。

  • 0的个数是103168。
  • 1的数量为32364。
  • 小于1且大于0.8的obs数量为2594个。
  • 大于0且小于0.8的obs个数为129个。

我正在尝试

pd.qcut
找到分位数,它只适用于更高的分位数(即找到多个分位数),例如 (>0.8)

pd.qcut(df['MAX_PERC'],80,retbins=True, duplicates='drop')

重新创建数据框:

    # Define the counts
    count_zeros = 103168
    count_ones = 32364
    count_between_08_1 = 2594
    count_between_0_08 = 129
    
    # Create arrays for each range
    zeros = np.zeros(count_zeros)
    ones = np.ones(count_ones)
    between_08_1 = np.random.uniform(0.8, 1.0, count_between_08_1)
    between_0_08 = np.random.uniform(0, 0.8, count_between_0_08)
    
    # Combine all arrays
    all_values = np.concatenate([zeros, ones, between_08_1, between_0_08])
    
    # Shuffle the array to mix the values
    np.random.shuffle(all_values)
    
    # Create the DataFrame
    df = pd.DataFrame({'MAX_PERC': all_values})

为什么?应该无法计算 2 处的分位数?

python pandas dataframe numpy quantile
1个回答
0
投票

关于询问例如2 个垃圾箱:

df.quantile(q=0.5, 
            axis=0)

返回中位数为零:

MAX_PERC    0.0
Name: 0.5, dtype: float64

但是您知道这一点,因为

count_zeros = 103168
超过了样本量的一半。

所以 2 个箱子在中位数处有箱子边缘是不可能成功的。

您可能误会了

duplicates = drop
?这不会删除重复的值,但会删除重复的垃圾箱。

© www.soinside.com 2019 - 2024. All rights reserved.