2016-09-19 43 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? –