如何解释 Pandas 中 describe 函数的百分位信息?

数据挖掘 熊猫
2022-02-15 04:08:34

当您在 Pandas 的数据帧上调用 describe 函数时,我对如何解释您看到的百分位信息感到有些困惑。

我相信我对百分位数的含义有一个基本的了解。例如,如果在一个测试中某人得分为 40%,在 75% 的百分位上排名,这意味着该分数高于总分的 75%。

但我不知道如何翻译这些知识来解释我从 describe 函数中看到的内容。

为了说明,给定以下内容:

test = pd.DataFrame([1,2,3,4,5,1,1,1,1,9])
test.describe()

这会打印出类似的内容:

| count | 10.000000 |
|-------|-----------|
| mean  | 2.800000  |
| std   | 2.616189  |
| min   | 1.000000  |
| 25%   | 1.000000  |
| 50%   | 1.500000  |
| 75%   | 3.750000  |
| max   | 9.000000  |

现在我不知道如何解释分配给 25%、50% 和 75% 的值。例如,10 个值中有 5 个设置为 1,但 50% 的值为 1.50000,显然这并不是说 1.5 的值为 50%,因为数据集中甚至没有 1.5。

另外为什么 25% 设置为 1.000000 而 75% 设置为 3.750000?

我知道我在解释这个错误,因此这个问题!如果有人可以帮助理解这一点,将不胜感激

3个回答

Pandas 的 describe 函数在内部使用该quantile函数。interpolation分位数函数的参数决定了如何估计分位数。下面的输出显示了如何根据使用的插值获得 3.75 或 3.5 作为 0.75 分位数。linear是默认设置。请在此处查看 Pandas 的分位数函数源代码1

test = pd.Series([1,2,3,4,5,1,1,1,1,9])
test_series = test[0]

quantile_linear = test.quantile(0.75, interpolation='linear')
print(f'quantile based on linear interpolation: {quantile_linear}')

基于线性插值的分位数:3.75

quantile_midpoint = test.quantile(0.75, interpolation='midpoint')
print(f'quantile based on midpoint interpolation: {quantile_midpoint}')

基于中点插值的分位数:3.5

百分位数表示低于特定值的分数百分比。他们告诉你一个分数相对于其他分数的位置。

例如:一个人身高 215 厘米在第 91 个百分位,这表明他的身高高于其他分数的 91%。

当您需要了解值/分数相对于您正在考虑的总体/数据分布的位置时,百分位数是一个很好的工具。值在值分布中的什么位置?虽然百分位数背后的概念很简单,但计算它们有不同的数学方法。

在您的示例中,50% 对应于有序值分布的中位数。在这种情况下,中位数是在两个值之间计算的:1 和 2 因此计算中位数(在这种情况下,因为值的数量是偶数,所以中位数在第五个和第六个有序值之间计算)作为之间的平均值他们1.5。

因为你有 10 个元素(这是偶数),所以你有一些棘手的事情:

如果你想要 50%(= 中位数),你必须取第 5 和第 6 个元素之间的平均值(从 1 开始),所以两边都有 5 个元素:

EEEE E1 | E2 EEEE

这会导致你

1 1 1 1 1 | 2 3 4 5 9

在您的情况下,E1 = 1 和 E2 = 2(因为它是排序的,因为您需要中位数和四分位数),所以结果为 Median = 1.5

25% 很容易理解,排序后的 df 的前 5 个值是“1”,所以如果你在第一季度进行削减,你会发现 1

我仍然对 75% 有疑问......对我来说,如果你把它切对了,75% 的值是 E3 :

EEEEEE | E3 | 电子电气设备

这导致

1 1 1 1 1 2 | 3 | 4 5 9

这使得 75% = 3 而不是 3.75 我不知道为什么它是 3.75