pandas.core.groupby.SeriesGroupBy.rank#

SeriesGroupBy.rank(method='average', ascending=True, na_option='keep', pct=False, axis=<no_default>)[source] #

Provide the rank of values within each group.

Parameters:
method{‘average’, ‘min’, ‘max’, ‘first’, ‘dense’}, default ‘average’
  • average: average rank of group.

  • min: lowest rank in group.

  • max: highest rank in group.

  • first: ranks assigned in order they appear in the array.

  • dense: like ‘min’, but rank always increases by 1 between groups.

ascendingbool, default True

False for ranks by high (1) to low (N).

na_option{‘keep’, ‘top’, ‘bottom’}, default ‘keep’
  • keep: leave NA values where they are.

  • top: smallest rank if ascending.

  • bottom: smallest rank if descending.

pctbool, default False

Compute percentage rank of data within each group.

axisint, default 0

The axis of the object over which to compute the rank.

Deprecated since version 2.1.0: For axis=1, operate on the underlying object instead. Otherwise the axis keyword is not necessary.

Returns:
DataFrame with ranking of values within each group

See also

Series.groupby

Apply a function groupby to a Series.

DataFrame.groupby

Apply a function groupby to each row or column of a DataFrame.

Examples

>>> df = pd.DataFrame(
...  {
...  "group": ["a", "a", "a", "a", "a", "b", "b", "b", "b", "b"],
...  "value": [2, 4, 2, 3, 5, 1, 2, 4, 1, 5],
...  }
... )
>>> df
 group value
0 a 2
1 a 4
2 a 2
3 a 3
4 a 5
5 b 1
6 b 2
7 b 4
8 b 1
9 b 5
>>> for method in ['average', 'min', 'max', 'dense', 'first']:
...  df[f'{method}_rank'] = df.groupby('group')['value'].rank(method)
>>> df
 group value average_rank min_rank max_rank dense_rank first_rank
0 a 2 1.5 1.0 2.0 1.0 1.0
1 a 4 4.0 4.0 4.0 3.0 4.0
2 a 2 1.5 1.0 2.0 1.0 2.0
3 a 3 3.0 3.0 3.0 2.0 3.0
4 a 5 5.0 5.0 5.0 4.0 5.0
5 b 1 1.5 1.0 2.0 1.0 1.0
6 b 2 3.0 3.0 3.0 2.0 3.0
7 b 4 4.0 4.0 4.0 3.0 4.0
8 b 1 1.5 1.0 2.0 1.0 2.0
9 b 5 5.0 5.0 5.0 4.0 5.0