Pandas Rank:方法='密集'和pct = True的意外行为

时间:2017-03-09 11:46:12

标签: python pandas rank dense-rank

假设我有一个重复的系列:

import pandas as pd
ts = pd.Series([1,2,3,4] * 5)

我想计算它的百分等级。 使用多个匹配计算排名总是有点棘手,但我认为我得到了意想不到的结果:

ts.rank(method = 'dense', pct = True)

Out[112]: 
0     0.05
1     0.10
2     0.15
3     0.20
4     0.05
5     0.10
6     0.15
7     0.20
8     0.05
9     0.10
10    0.15
11    0.20
12    0.05
13    0.10
14    0.15
15    0.20
16    0.05
17    0.10
18    0.15
19    0.20
dtype: float64

所以我得到百分位数[0.05,0.1,0.15,0.2],其中我猜预期输出可能是[0.25,0.5,0.75,1],即将输出乘以重复值的数量。

我的猜测是,为了计算百分位数,pd.rank只是除以观察数,这对于方法='密集'是错误的。

所以我的问题是:

  1. 您是否同意输出是意外/错误

  2. 如何获得我的预期输出,即如果我没有任何重复,我将获得的百分位数分配给每个副本 系列?

1 个答案:

答案 0 :(得分:0)

我在GithUB上报告了这个问题:https://github.com/pandas-dev/pandas/pull/15639

所有pct = True确实除以nobs,这给方法='密集'提供了意想不到的行为,因此这被视为在下一个主要版本中修复的错误。