python - 为什么 Scipy 的 PERCENTRANK.INC 返回的结果与 Excel 的 PERCENTRANK.INC 不同?

标签 python excel-formula scipy percentile

我在 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,则数字会抖动。难道是这样PERCENTILERANK.INC有效吗?

最佳答案

Excel 函数 PERCENTILERANK.INC 排除最大值(在我的例子中为 45)。这就是为什么它像 scipy 那样显示 06.25 的原因。

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

array = list(filter(lambda a: a != max(array), array))

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

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

基于 Brian Pendleton 评论的其他信息。以下是 Excel 函数的链接,解释 PERCENTILERANK.INC以及其他排名功能。谢谢你。

关于python - 为什么 Scipy 的 PERCENTRANK.INC 返回的结果与 Excel 的 PERCENTRANK.INC 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47931749/

相关文章:

python - 使用 Heroku 安装 Celery 和 Redis

python - 如何在 Django 模板中查看一个字符串是否包含另一个字符串

python - 合并 Python 列表中的一些列表项

使用正则表达式进行数据验证的 Excel 公式

excel - 无需VBA根据单元格的值提取所有行

python - numpy cov(协方差)函数,它到底计算什么?

python - 在进程之间共享类属性的最佳方式

excel - 用网络天数计算处理时间

python - 平滑连接输入的正弦波

python - scipy stats binom cdf 返回 nan