Python Pandas - 手动计算分位数

3

我试图手动计算一列值的分位数,但是使用公式时无法找到与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,那么pandas是如何得出1.668413的呢?

1个回答

4
功能quantile将根据数据范围分配百分比。
在您的情况下:
  • -0.204708将被视为第0个百分位数,
  • 0.478943将被视为50th百分位数,
  • 1.965781将被视为100th百分位数。
  • 因此,您可以使用以下方式计算90th百分位数(在50th和100th百分位数之间进行线性插值:
    >>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)。希望这样说可以让您理解。

    这非常有帮助。谢谢并接受了解决方案。 - Joe_12345
    太好了 - 很高兴它有帮助! - qbzenker

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