代码之家  ›  专栏  ›  技术社区  ›  Alex

熊猫是否显示了错误的百分位数?

  •  5
  • Alex  · 技术社区  · 8 年前

    我正在处理这个WNBA数据集 here . 我在分析 Height 变量,下表显示了记录的每个高度值的频率、累积百分比和累积频率:

    img

    从表中我可以很容易地得出结论,第一个四分位(第25个百分位)不能大于175。

    但是,当我使用 Series.describe() ,我听说第25百分位是176.5。为什么会这样?

    wnba.Height.describe()
    count    143.000000
    mean     184.566434
    std        8.685068
    min      165.000000
    25%      176.500000
    50%      185.000000
    75%      191.000000
    max      206.000000
    Name: Height, dtype: float64
    
    3 回复  |  直到 8 年前
        1
  •  5
  •   David Leon    8 年前

    估计分位数有多种方法。
    175.0 vs 176.5涉及两种不同的方法:

    1. 包括Q1(这给出了176.5)和
    2. 不包括Q1(给出175.0)。

    估计的不同之处如下

    #1
    h = (N − 1)*p + 1 #p being 0.25 in your case
    Est_Quantile =  x⌊h⌋ + (h − ⌊h⌋)*(x⌊h⌋ + 1 − x⌊h⌋)
    
    #2
    h = (N + 1)*p   
    x⌊h⌋ + (h − ⌊h⌋)*(x⌊h⌋ + 1 − x⌊h⌋) 
    
        2
  •  1
  •   jpp    8 年前

    这是一个统计问题。百分位数有很多定义。以下是一种解释,为什么在计算25%指数时要加1:

    一个直观的答案是,数字1到n的平均值为 不是n/2,而是(n+1)/2。这给了你一个提示 p*n会产生稍微太小的值。

    资源:

        3
  •  1
  •   David Leon    8 年前

    这是因为默认情况下 describe() 执行线性插值。

    所以 pandas 未显示错误的百分比
    (它只是没有显示您想要查看的百分比)。

    为了得到你想要的你可以使用的东西 .quantile() 在…上 Height 系列,指定插值到 'lower' :

    df = pd.read_csv('../input/WNBA Stats.csv')
    df.Height.quantile(0.25,interpolation='lower') #interpolation lower to get what you expect
    

    看见 documentation 查看更多选项。


    请注意,作为 @jpp said :

    百分位数有很多定义

    你可以看到这个 answer too 这是关于 numpy 熊猫 例如,百分比计算。