Python Pandas - 手动分位数计算
Python Pandas - Quantile calculation manually
我正在尝试手动计算列值的分位数,但与 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?
函数 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)。希望这是有道理的。
我正在尝试手动计算列值的分位数,但与 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?
函数 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)。希望这是有道理的。