我在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的PERCENTILERANK.INC
功能的任何想法吗?
我正在使用scipy 1.0.0
,numpy 1.13.3
,python 3.5.2
,Excel 2016
修改的
如果我不包括最大值45,则数字为jive。这可能是PERCENTILERANK.INC
的工作原理吗?
答案 0 :(得分:3)
Excel函数PERCENTILERANK.INC
排除最大值(在我的情况下为45)。这就是为什么它显示0
与6.25
之类的scipy
。
为了解决这个问题,我修改了我的函数以删除数组的最大值,如下所示:
array = list(filter(lambda a: a != max(array), array))
return 100 - int(stats.percentileofscore(array, score, kind='strict'))
这给了我正确的结果,并且我的所有其他测试都通过了。
基于Brian Pendleton的评论的其他信息。以下是Excel函数的链接,解释了PERCENTILERANK.INC以及其他排名函数。谢谢你。