pandas.DataFrame.rank#
- DataFrame.rank(axis=0, method='average', numeric_only=False, na_option='keep', ascending=True, pct=False)[源代码]#
沿轴计算数值数据的排名(从1到n)。
默认情况下,相等值的排名是这些值排名的平均值。
- 参数:
- 轴{0 或 ‘index’, 1 或 ‘columns’}, 默认 0
索引到直接排名。对于 Series,此参数未使用并默认为 0。
- 方法{‘average’, ‘min’, ‘max’, ‘first’, ‘dense’}, 默认 ‘average’
如何对具有相同值(即并列)的记录组进行排名:
average: 组的平均排名
min: 组中最低等级
max: 组中最高等级
首先:按它们在数组中出现的顺序分配等级
dense: 类似于 ‘min’,但组之间的等级总是增加1。
- numeric_only布尔值, 默认为 False
对于 DataFrame 对象,如果设置为 True,则仅对数值列进行排序。
在 2.0.0 版本发生变更:
numeric_only
的默认值现在是False
。- na_option{‘keep’, ‘top’, ‘bottom’}, 默认 ‘keep’
如何对 NaN 值进行排序:
保持:将 NaN 排名分配给 NaN 值
top: 将最低等级分配给 NaN 值
bottom: 将最高等级分配给 NaN 值
- 升序bool, 默认为 True
元素是否应按升序排序。
- pct布尔值, 默认为 False
是否以百分位数形式显示返回的排名。
- 返回:
- 与调用者相同类型
返回一个带有数据排名的 Series 或 DataFrame。
参见
core.groupby.DataFrameGroupBy.rank
每个组内值的排名。
core.groupby.SeriesGroupBy.rank
每个组内值的排名。
例子
>>> df = pd.DataFrame( ... data={ ... "Animal": ["cat", "penguin", "dog", "spider", "snake"], ... "Number_legs": [4, 2, 4, 8, np.nan], ... } ... ) >>> df Animal Number_legs 0 cat 4.0 1 penguin 2.0 2 dog 4.0 3 spider 8.0 4 snake NaN
领带被分配给该组的排名(默认情况下)的平均值。
>>> s = pd.Series(range(5), index=list("abcde")) >>> s["d"] = s["b"] >>> s.rank() a 1.0 b 2.5 c 4.0 d 2.5 e 5.0 dtype: float64
以下示例展示了该方法在上述参数下的行为:
default_rank: 这是在不使用任何参数时获得的默认行为。
max_rank: 设置
method = 'max'
时,具有相同值的记录使用最高排名(例如:由于 ‘cat’ 和 ‘dog’ 都在第2和第3位置,因此分配排名3。)NA_bottom: 选择
na_option = 'bottom'
,如果有记录包含NaN值,它们会被放在排名的底部。pct_rank: 当设置
pct = True
时,排名以百分位排名表示。
>>> df["default_rank"] = df["Number_legs"].rank() >>> df["max_rank"] = df["Number_legs"].rank(method="max") >>> df["NA_bottom"] = df["Number_legs"].rank(na_option="bottom") >>> df["pct_rank"] = df["Number_legs"].rank(pct=True) >>> df Animal Number_legs default_rank max_rank NA_bottom pct_rank 0 cat 4.0 2.5 3.0 2.5 0.625 1 penguin 2.0 1.0 1.0 1.0 0.250 2 dog 4.0 2.5 3.0 2.5 0.625 3 spider 8.0 4.0 4.0 4.0 1.000 4 snake NaN NaN NaN 5.0 NaN