为什么Scipy的百分位数返回与Excel的PERCENTRANK.INC不同的结果?

问题描述 投票:2回答:1

我正在用scipy的percentileofscore函数遇到一个奇怪的问题。

在Excel中,我有以下行:

0
1
3
3
3
3
3
4
6
8
9
11
11
11
12
45

接下来,我有一列计算每行的percentilerank.inc:

=100 * (1-PERCENTRANK.INC($A:$A,A1))

结果如下:

100
94
87
87
87
87
87
54
47
40
34
27
27
27
7
0

然后,我将相同的数据放入一个数组中,并使用scipy计算百分比

100 - stats.percentileofscore(array, score, kind='strict')

但是,我的结果如下:

100
94
88
88
88
88
88
56
50
44
38
31
31
31
13
7

以下结果显示了差异:

Data    Excel   Scipy
0       100     100
1       94      94
3       87      88
3       87      88
3       87      88
3       87      88
3       87      88
4       54      56
6       47      50
8       40      44
9       34      38
11      27      31
11      27      31
11      27      31
12      7       13
45      0       7

结果显然存在一些差异。其中一些是4位数。

关于如何模仿Excel qazxsw poi功能的任何想法?

我正在使用PERCENTILERANK.INCscipy 1.0.0numpy 1.13.3python 3.5.2

编辑如果我不包括最大值45,则数字为jive。这可能是Excel 2016的工作原理吗?

python excel-formula scipy percentile
1个回答
3
投票

Excel函数PERCENTILERANK.INC排除了最大值(在我的情况下为45)。这就是为什么它像PERCENTILERANK.INC那样显示06.25

为了解决这个问题,我修改了我的函数以删除数组的最大值,如下所示:

scipy

这给了我正确的结果,我的所有其他测试都通过了。

其他信息基于Brian Pendleton的评论。这是Excel函数的链接,解释array = list(filter(lambda a: a != max(array), array)) return 100 - int(stats.percentileofscore(array, score, kind='strict')) 以及其他排名函数。谢谢你。

© www.soinside.com 2019 - 2024. All rights reserved.