如何在Excel中复现Pandas的rank()及rank(pct=True)计算结果
如何在Excel中复现Pandas的rank()及rank(pct=True)计算结果
咱们先搞清楚你遇到的问题根源:Pandas的rank()方法默认是升序排序规则(数值越小,排名越靠前;数值越大,排名越靠后),而你一开始用的Excel公式=RANK.AVG(A1,$A$1:$A$13,0)里,第三个参数0代表降序排序(数值越大,排名越靠前),这就导致两者的排名结果完全反过来了。
下面分两步给你对应公式,完美复现Pandas的结果:
1. 复现Pandas的rank()结果(对应你要的rank列)
把Excel的排序方向改成升序,也就是把RANK.AVG的第三个参数换成1,公式如下:
=RANK.AVG(A1,$A$1:$A$13,1)
把这个公式下拉填充到所有行,你就能得到和Pandas完全一致的排名:
- 两个500的排名会是12.5(对应Pandas里的12.5)
- 两个30的排名会是3.5(对应Pandas里的3.5)
- 最小的1排名是1,和Pandas结果匹配
2. 复现Pandas的rank(pct=True)结果(对应你要的perc列)
Pandas的rank(pct=True)本质是把排名值除以总数据的行数,所以我们可以直接把上面得到的排名结果除以数据的总数量。为了灵活(比如数据行数变化时不用手动改数字),可以用COUNTA函数统计总非空行数:
=RANK.AVG(A1,$A$1:$A$13,1)/COUNTA($A$1:$A$13)
或者如果你的数据全是数字,用COUNT函数也可以:
=RANK.AVG(A1,$A$1:$A$13,1)/COUNT($A$1:$A$13)
填充后就能得到和Pandas一致的百分比结果,比如500对应的0.961538,30对应的0.269231,完全匹配你的示例数据。
给你验证一下:总共有13行数据,12.5/13≈0.961538,正好是Pandas里的perc值,完美对应上。
备注:内容来源于stack exchange,提问作者srinath
相关产品推荐
相关产品推荐

