1

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

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 只是简单地除以观察次数,这对于 method = 'dense' 是错误的。

所以我的问题是:

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

  2. 我怎样才能获得我的预期输出,即如果我在系列中没有任何重复,我将获得的百分位等级分配给每个重复?

4

1 回答 1

0

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

pct=True 所做的只是除以 nobs,这会导致 method = 'dense' 出现意外行为,因此这被认为是在下一个主要版本中修复的错误。

于 2017-03-10T09:12:16.000 回答