Python Pandas - 如何通过描述函数计算 25 个百分位数

Posted

技术标签:

【中文标题】Python Pandas - 如何通过描述函数计算 25 个百分位数【英文标题】:Python Pandas - how is 25 percentile calculated by describe function 【发布时间】:2017-01-26 19:42:19 【问题描述】:

对于数据框中的给定数据集,当我应用describe 函数时,我会得到包括最小值、最大值、25%、50% 等在内的基本统计数据。

例如:

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

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

1) 据我所知,是:

formula = percentile * n (n is number of values)

在这种情况下:

25/100 * 4 = 1

所以第一个位置是数字 4 但根据描述函数它是5.5

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

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

25/100 * (6-4) = 1/4*2 = 0.5

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

仍然没有收到5.5

有人可以澄清一下吗?

【问题讨论】:

这不是(max - min)/4吗?所以 10-4 = 6 然后除以 4 得到 1.5,然后将其设置为 4 和 10 之间的间隔? 我认为它内部使用了numpy,在这里查看百分号代码github.com/numpy/numpy/blob/… 开源的美妙之处在于您可以自己检查代码。根据code of describe,它调用系列'quantile method。文档字符串有你的答案。 【参考方案1】:

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

返回给定分位数的值,一个 la numpy.percentile。

然后,查看numpy.percentileexplanation,可以看到插值方式默认设置为linear

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

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

res_25 = 4 + (6-4)*(3/4) =  5.5

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

res_75 = 8 + (10-8)*(1/4) = 8.5

如果您将插值方法设置为“中点”,那么您将得到您想到的结果。

.

【讨论】:

【参考方案2】:

我认为将此计算视为 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

【讨论】:

但是为什么要使用 10 而不是 6? 正如 Orli 所说,它的 min+(max-min)*percentile。所以,它的 4+(10-4)*percentile 我试图理解,但是这个公式和方法百分位数的结果不同:my_data = [2.3, 2.7, 3.5, 3.6, 4.2, 4.5] print(np.percentile(my_data, 25 )) 打印(np.percentile(my_data, 75))

以上是关于Python Pandas - 如何通过描述函数计算 25 个百分位数的主要内容,如果未能解决你的问题,请参考以下文章

Serverless 解惑——函数计算如何安装字体

函数计算支持 MySQL 实例绑定

Serverless 解惑——函数计算如何访问 Mongo 数据库

Serverless 解惑——函数计算如何访问 Redis 数据库

Serverless 解惑——函数计算如何访问 MySQL 数据库

如何通过 Python Pandas 正确规范化 json