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'.
是错误的
所以我的问题是:
你同意输出是unexpected/wrong
我怎样才能获得我的预期输出,即如果我在
系列?
我已在 GithUB 上报告了该问题:https://github.com/pandas-dev/pandas/pull/15639
pct=True 所做的只是除以 nob,这给 method = 'dense' 带来了意想不到的行为,所以这被认为是一个错误,将在下一个主要版本中修复。
假设我有一个重复的系列:
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'.
是错误的所以我的问题是:
你同意输出是unexpected/wrong
我怎样才能获得我的预期输出,即如果我在 系列?
我已在 GithUB 上报告了该问题:https://github.com/pandas-dev/pandas/pull/15639
pct=True 所做的只是除以 nob,这给 method = 'dense' 带来了意想不到的行为,所以这被认为是一个错误,将在下一个主要版本中修复。