【问题标题】:Python Pandas - Quantile calculation manuallyPython Pandas - 手动分位数计算
【发布时间】:2017-12-06 19:54:21
【问题描述】:

我正在尝试手动计算列值的分位数,但与 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 的呢?

【问题讨论】:

    标签: python pandas statistics quantile


    【解决方案1】:

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

    在你的情况下:

    • -0.204708 将被视为第 0 个百分位数,
    • 0.478943 将被视为第 50 个百分位数,并且
    • 1.965781 将被视为第 100 个百分位数。

    因此,您可以通过以下方式计算第 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)。希望这是有道理的。

    【讨论】:

    • 这很有帮助。谢谢并接受了解决方案。
    • 太棒了——很高兴它有帮助!
    猜你喜欢
    • 2021-11-17
    • 2017-05-17
    • 2014-10-04
    • 2017-11-20
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2014-07-29
    相关资源
    最近更新 更多