【问题标题】:Is pandas showing the wrong percentile?熊猫显示错误的百分位数吗?
【发布时间】:2018-08-08 01:45:34
【问题描述】:

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

从表中我可以很容易地得出结论,第一个四分位数(第 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

【问题讨论】:

  • 正如许多人所说,有多种方法可以获得百分位数。如果你需要得到 175 可以看看我的answer

标签: python pandas statistics


【解决方案1】:

估计分位数有多种方法。
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】:

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

    所以,不,pandas 没有显示错误的百分位数
    (它只是没有显示你想看到的百分位数)。

    要获得您期望的结果,您可以在Height 系列上使用.quantile(),将插值指定为'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,它讨论了numpypandas 百分位数计算之间的差异。

    【讨论】:

      【解决方案3】:

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

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

      资源:

      【讨论】:

        猜你喜欢
        • 2022-01-16
        • 2017-05-13
        • 1970-01-01
        • 1970-01-01
        • 2014-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-19
        相关资源
        最近更新 更多