**Pandas**

*chevron_left*

**Sorting and Restructuring DataFrames**

# Pandas DataFrame | nsmallest method

*schedule*Aug 10, 2023

*toc*Table of Contents

*expand_more*

**mathematics behind data science**with 100+ top-tier guides

Start your free 7-days trial now!

Pandas `DataFrame.nsmallest(~)`

method returns `n`

rows with the smallest value for the specified columns. The returned rows are sorted in ascending order.

# Parameters

1. `n`

link | `int`

The number of rows you want returned.

2. `columns`

link | `string`

or `list`

of `strings`

The label(s) of the columns you want to order by.

3. `keep`

link | `string`

| `optional`

How to handle duplicate values in the edge cases. Edge cases arise, for instance, if you select `n=2`

, and the values are `[5,4,4,4]`

.

Value | How to deal with duplicate values at edge cases |
---|---|

| Keep the first occurrence(s). |

| Keep the last occurrence(s). |

| Keep all the occurrences. |

For `"all"`

, the number of returned rows may exceed `n`

. By default, `keep="first"`

.

# Return Value

A `DataFrame`

with `n`

rows that have the smallest value in the specified columns, in ascending order.

# Examples

## Basic usage

Consider the following DataFrame:

```
df = pd.DataFrame({"A":[4,6,1], "B":[3,3,8]})df
A B0 4 31 6 32 1 8
```

To get the `2`

rows with the smallest value for column `A`

:

```
df.nsmallest(2, "A")
A B2 1 80 4 3
```

Notice how the returned rows are sorted in ascending order of the values in `A`

.

## Dealing with duplicate values

Consider the same `df`

we had above:

```
df
A B0 4 31 6 32 1 8
```

### Keeping only the first

To get the first occurrence of the row with the smallest value for column `B`

:

```
df.nsmallest(1, "B") # By default, keep="first"
A B0 4 3
```

Notice how row `0`

was returned, as opposed to row `1`

, despite the fact that they both had the same value (`3`

) for column `B`

.

### Keeping only the last

To get the last occurrence instead, set `keep="last"`

:

```
df.nsmallest(1, "B", keep="last")
A B1 6 3
```

### Keeping all occurrences

To keep both the occurrences, set `keep="all"`

:

```
df.nsmallest(1, "B", keep="all")
A B0 4 31 6 3
```

Notice how despite the fact that we set `n=1`

, we end up with 2 rows.