Python Pandas - 手动分位数计算

时间:2017-07-03 13:54:05

标签: python pandas statistics quantile

我正在尝试手动计算列值的分位数,但是与Pandas的结果输出相比,无法使用公式手动找到正确的分位数值。 我四处寻找不同的解决方案,但没有找到正确的答案

In [54]: df

Out[54]:
    data1   data2       key1    key2
0 -0.204708 1.393406    a       one
1 0.478943  0.092908    a       two
2 1.965781  1.246435    a       one

In [55]: grouped = df.groupby('key1')
In [56]: grouped['data1'].quantile(0.9)
Out[56]:
key1
a 1.668413

使用公式手动查找,n为3,因为data1列中有3个值

quantile(n+1)

应用df1列的值

=0.9(n+1) 
=0.9(4)
= 3.6

所以第3.6位是1.965781,那么大熊猫如何给出1.668413?

1 个答案:

答案 0 :(得分:2)

函数quantile将根据您的数据范围分配百分比。

在你的情况下:

  • -0.204708将被视为第0个百分位,
  • 0.478943将被视为第50百分位和
  • 1.965781将被视为百分之百。

因此,您可以通过以下方式计算第90个百分点(使用第50和第100百分位数之间的线性插值:

>>import numpy as np

>>x =np.array([-0.204708,1.965781,0.478943])
>>ninetieth_percentile = (x[1] - x[2])/0.5*0.4+x[2]
>>ninetieth_percentile    
1.6684133999999999

注意值0.5和0.4来自这样的事实:数据的两个点跨越50%的数据,0.4表示高于您希望找到的50%的量(0.5 + 0.4 = 0.9)。希望这是有道理的。