2016-09-19 44 views
3

对于在数据帧中的给定的数据集,当我应用describe功能时,得到基本统计资料,其中包括最小值,最大值,25%,50%等计算Python的熊猫 - 如何25百分位数由描述函数

例如:

data_1 = pd.DataFrame({'One':[4,6,8,10]},columns=['One']) 
data_1.describe() 

的输出是:

 One 
count 4.000000 
mean 7.000000 
std  2.581989 
min  4.000000 
25%  5.500000 
50%  7.000000 
75%  8.500000 
max  10.000000 

我的问题是:什么是数学公式吨o计算25%?

1)根据我所知道的,那就是:

formula = percentile * n (n is number of values) 

在这种情况下:

25/100 * 4 = 1 

所以第一个位置是4号,但根据描述功能是5.5

2)另一个例子说 - 如果你得到一个整数,然后取4和6的平均值 - 这将是5 - 仍然不符合5.5描述。

3)另教程说 - 你花2号之间的差别 - 25%乘法和加法到较低的数字:

25/100 * (6-4) = 1/4*2 = 0.5 

并称,在较低的数字:4 + 0.5 = 4.5

仍没有得到5.5

有人可以澄清?

+0

是不是这个'(最大 - 最小)/ 4'?所以10-4 = 6然后除以4得到1.5,然后设置为4和10之间的间隔? – EdChum

+0

我认为它内部使用numpy,检查百分点代码在这里https://github.com/numpy/numpy/blob/b91e8d8f164731bb710cc1e5173cc8ec3f8fadf5/numpy/lib/function_base.py#L3796 –

+1

开源的美丽是,你可以检查编码自己。根据[describe]的代码(https://github.com/pydata/pandas/blob/37f95cef85834207db0930e863341efb285e38a2/pandas/core/generic.py#L5181),它会调用系列'['quantile' method](https ://github.com/pydata/pandas/blob/37f95cef85834207db0930e863341efb285e38a2/pandas/core/series.py#L1345)。文档字符串有你的答案。 – IanS

回答

7

pandas documentation有大约位数的计算,其中对numpy.percentile参考由信息:

返回值在给定的位数,一拉numpy.percentile。

然后,检查numpy.percentile explanation,我们可以看到,内插方法被默认设置为线性

线性的:I +(j - I)*分数,其中分数

:是i和j

为了您specfic情况下包围该指数的小数部分 ,25位数的结果

res_25 = 4 + (6-4)*(3/4) = 5.5 

为75位数,我们则得到:

res_75 = 8 + (10-8)*(1/4) = 8.5 

如果设置了内插法“中点”,那么你会得到你想到的结果。

0

我认为通过将此计算看作分钟+(最大 - 最小)*百分位数更容易理解。它具有相同的结果作为NumPy的描述此功能:

线性:1 +(j - I)*分数,其中分数是索引的小数部分通过i和j所包围

res_25 = 4+(10-4)*percentile = 4+(10-4)*25% = 5.5 
res_75 = 4+(10-4)*percentile = 4+(10-4)*75% = 8.5 
+0

但是你为什么要用10而不是6? –