Python Pandas - 如何通过describe函数计算25百分位数

Gub*_*ooo 9 python percentile pandas

对于数据框中的给定数据集,当我应用该describe函数时,我得到的基本统计数据包括min,max,25%,50%等.

例如:

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

输出是:

        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
Run Code Online (Sandbox Code Playgroud)

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

1)根据我所知,它是:

formula = percentile * n (n is number of values)
Run Code Online (Sandbox Code Playgroud)

在这种情况下:

25/100 * 4 = 1
Run Code Online (Sandbox Code Playgroud)

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

2)另一个例子说 - 如果你得到一个整数然后取4和6的平均值 - 这将是5 - 仍然与5.5描述给出的不匹配.

3)另一个教程说 - 你取两个数字之间的差异 - 乘以25%并加上较低的数字:

25/100 * (6-4) = 1/4*2 = 0.5
Run Code Online (Sandbox Code Playgroud)

将其添加到较低的数字: 4 + 0.5 = 4.5

仍然没有得到5.5.

有人可以澄清一下吗?

Nik*_*ble 10

pandas文档中有关于分位数计算的信息,其中引用了numpy.percentile:

在给定的分位数处返回值,即la numpy.percentile.

然后,检查numpy.percentile 解释,我们可以看到插值方法默认设置为线性:

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

对于您的具体情况,第25个分位数来自:

res_25 = 4 + (6-4)*(3/4) =  5.5
Run Code Online (Sandbox Code Playgroud)

对于第75个分位数,我们得到:

res_75 = 8 + (10-8)*(1/4) = 8.5
Run Code Online (Sandbox Code Playgroud)

如果将插值方法设置为"中点",那么您将获得您想到的结果.

.


小智 6

我认为通过将此计算视为min +(max-min)* percentile会更容易理解。它具有与NumPy中描述的此功能相同的结果:

线性:i +(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
Run Code Online (Sandbox Code Playgroud)