pandas.DataFrame.rank#
- DataFrame.rank(axis=0, method='average', numeric_only=NoDefault.no_default, na_option='keep', ascending=True, pct=False)[源代码]#
沿轴计算数值数据排名(从1到n)。
默认情况下,为相等值分配的排名是这些值的排名的平均值。
- 参数
- axis{0或‘index’,1或‘Columns’},默认为0
直接排名的索引。
- method{‘Average’,‘Min’,‘Max’,‘First’,‘Density’},默认‘Average’
如何对具有相同值(即平局)的一组记录进行排名:
Average:组的平均排名
MIN:组中排名最低的
最大:小组中最高的排名
First:按照在数组中出现的顺序分配的排名
密集:像‘min’,但组之间的排名总是增加1。
- numeric_only布尔值,可选
对于DataFrame对象,如果设置为True,则仅对数值列进行排名。
- na_option{‘Keep’,‘Top’,‘Bottom’},默认‘Keep’
如何对NaN值进行排名:
Keep:将NaN等级指定给NaN值
顶部:将最低等级分配给NaN值
下:为NaN值指定最高等级
- ascending布尔值,默认为True
元素是否应按升序排列。
- pct布尔值,默认为False
是否以百分位形式显示返回的排名。
- 退货
- 与呼叫者类型相同
返回数据排名为值的Series或DataFrame。
参见
core.groupby.GroupBy.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'
具有相同值的记录使用最高排名进行排序(例如:由于‘猫’和‘狗’都在第二和第三位,因此分配了第三位。)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