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

5
我正在使用这个WNBA数据集(在此处)。我正在分析 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

正如许多人所说,有很多方法可以获得百分位数。如果您需要获得175,您可以查看我的答案 - David Leon
3个回答

5

有多种方法可以估计分位数。
175.0和176.5是两种不同方法的比较:

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

估计结果有以下差异:

#1
h = (N1)*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⌋) 

1

1
那是因为默认情况下,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

请参阅 文档 以获取更多选项。
请注意,正如@jpp所说

百分位有许多定义

你可以看到这个答案, 它谈到了例如 numpypandas 计算百分位的差异。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接