Pandas 排名:方法的意外行为 = 'dense' 和 pct = True

Pandas Rank: unexpected behavior for method = 'dense' and pct = True

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

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 只是除以观察次数,这对于方法 = 'dense'.

是错误的

所以我的问题是:

  1. 你同意输出是unexpected/wrong

  2. 我怎样才能获得我的预期输出,即如果我在 系列?

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

pct=True 所做的只是除以 nob,这给 method = 'dense' 带来了意想不到的行为,所以这被认为是一个错误,将在下一个主要版本中修复。