为什么 Scipy 的 percentileofscore 返回的结果与 Excel 的 PERCENTRANK.INC 不同?
Why is Scipy's percentileofscore returning a different result than Excel's PERCENTRANK.INC?
我 运行 遇到了 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
计算 percentilofscore
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,数字就会跳动。这可能是 PERCENTILERANK.INC
的工作原理吗?
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 的评论。这是 link 到 Excel 函数的解释 PERCENTILERANK.INC 以及其他排名函数。谢谢。
我 运行 遇到了 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
计算 percentilofscore100 - 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,数字就会跳动。这可能是 PERCENTILERANK.INC
的工作原理吗?
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 的评论。这是 link 到 Excel 函数的解释 PERCENTILERANK.INC 以及其他排名函数。谢谢。