The **rank()** method in pandas compute numerical data ranks (1 through n) along axis. By default, equal values are assigned a rank that is the average of the ranks of those values.

### Syntax –

`DataFrame.rank(axis=0, method='average', numeric_only=None, na_option='keep', ascending=True, pct=False)`

**axis – **Whether to compute the ordering row-wise or column-wise

**method – **How to rank duplicate values in a group

- average: average rank of the group
- min: lowest rank in the group
- max: highest rank in the group
- first: ranks assigned in order they appear in the array
- dense: like ‘min’, but rank always increases by 1 between groups.

**numeric_only – **For DataFrame objects, rank only numeric columns if set to True.

**na_option – **How to rank NaN values:

- keep: assign NaN rank to NaN values
- top: assign lowest rank to NaN values
- bottom: assign highest rank to NaN values

**ascending – **Whether or not the elements should be ranked in ascending order. By default it is True.

**pct – **Whether or not to display the returned rankings in percentile form.

## Examples –

Let’s create a dataframe to work with.

```
import pandas as pd
import numpy as np
df = pd.DataFrame({'Animal': ['cat', 'penguin', 'dog','spider', 'snake'],
'Number_legs': [4, 2, 4, 8, np.nan]})
df
```

### 1 . Rank data in ascending order –

By default pandas rank the data in ascending order i.e. the lowest value gets the highest rank.

```
df['Rank_asc'] = df['Number_legs'].rank()
df
```

Since 2 (penguin) is the smallest value in this column, it gets a rank of 1. Next cat and dogs both have 4 legs they gets a rank of 2.5 because by default pandas calculate the average of the rank when we have a duplicate value ( 2+3 / 2 = 2.5). Next spider has 8 legs that is why it gets a rank of 4.

### 2 . Rank data in descending order –

To rank the data in descending order we need to set the ascending parameter to **ascending=False**. That means the highest value gets the highest rank.

```
df['Rank_desc'] = df['Number_legs'].rank(ascending=False)
df
```

Since 8 (spider) is the highest value that is why it gets the rank of 1. The cats and dogs gets a rank of 2.5 and penguin gets a rank of 4.

### 3 . Ranking duplicate data –

As i said before by default pandas takes the average of the rank when we have duplicate data. But there are other methods also available.

```
df['average_rank'] = df['Number_legs'].rank()
df['max_rank'] = df['Number_legs'].rank(method='max')
df['min_rank'] = df['Number_legs'].rank(method='min')
df['first_rank'] = df['Number_legs'].rank(method='first')
df['dense_rank'] = df['Number_legs'].rank(method='dense')
df
```

setting `method = 'max'`

the records that have the same values are ranked using the highest rank (e.g.: since ‘cat’ and ‘dog’ are both in the 2nd and 3rd position, rank 3 is assigned.)

### 4 . Ranking NaN values –

```
df['na_keep'] = df['Number_legs'].rank(na_option='keep')
df['na_top'] = df['Number_legs'].rank(na_option='top')
df['na_bottom'] = df['Number_legs'].rank(na_option='bottom')
df
```

When **na_option** is **keep** the null values gets a rank of NaN which is the default. But if you change the setting to **top** then NaN value gets the highest rank and when **bottom** then gets the lowest rank.

### 5. Rank data in percentile form –

To rank data in percentile form set the **pct** parameter to **pct=True**.

```
df['default_rank'] = df['Number_legs'].rank()
df['pct_rank'] = df['Number_legs'].rank(pct=True)
df
```