Pandas的quantile()函数在内部是如何工作的?

3
在本文中: pandas如何计算四分位数? 这是@perl关于quantile()函数工作原理的解释:
df = pd.DataFrame([5,7,10,15,19,21,21,22,22,23,23,23,23,23,24,24,24,24,25], columns=['val'])

让我们考虑0.25(当然也适用于0.75):元素数量应为(len(df)-1)*0.25 = (19-1)*0.25 = 4.5,因此我们位于第4个元素(即19,从0开始计数)和第5个元素(即21)之间。因此,我们有i=19,j=21,分数=0.5,i + (j-i) * fraction = 20。

我仍然无法理解quantile()函数的工作原理。

所有quantiles的公式都建议我们取q * (n+1),其中q是要计算的quantile。然而,在@perl的解释中,使用的公式是q * (n-1)。为什么是(n-1)而不是(n+1)?

其次,为什么@perl使用分数0.5?

如果数据点的总数是偶数还是奇数,量化计算方法是否有区别?*

如果我们取两个数据框:

df1 = pd.DataFrame([2,4,6,8,10,12]) # n=6 (even)

df2 = pd.DataFrame([1,3,5,7,9]) # n=5 (odd)

他们各自的分位数如下(附有图片):分位数图表:

我无法找出以上两种情况中如何计算分位数。

q -> df1 -> df2

0.2 -> 4.0 -> 2.6

0.25 -> 4.5 -> 3.0

0.5 -> 7.0 -> 5.0

0.75 -> 9.5 -> 7.0

0.8 -> 10.0 -> 7.4

可以有人解释一下吗?我将非常感激。

提前致谢。

Vineet

1个回答

0

我不确定,但你可以试试这个。

0 <= q <= 1

df = pd.DataFrame([1,3,5,7,9], columns=['val'])

df.quantile(0.25)

output: val 3.0

解释:n=5,q=0.25。由于我使用了q=0.25,因此我们可以使用index=n/4=1.25

index的条件:

  • 如果index的小数部分像0.25 < 0.50,则index=floor(index)
  • 如果index的小数部分>0.50,则index=ceil(index)
  • 如果index的小数部分==0.50,则value=int(index)+0.5

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