---
title: pandas nsmallest — ดึง N แถวที่ค่าน้อยที่สุด (Bottom-N)
url: https://www.thepexcel.com/functions/python/selection/pandas-nsmallest/
type: function-explainer
program: Python
syntax: "df.nsmallest(n, columns)"
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 3
  usefulness: 5
---

# pandas nsmallest — ดึง N แถวที่ค่าน้อยที่สุด (Bottom-N)

> nsmallest ใน pandas ผมใช้ดึง n แถวที่ค่าในคอลัมน์ที่ระบุต่ำสุดออกมา เหมือนใน Excel ที่เรา Sort จากน้

## คำอธิบาย

nsmallest ใน pandas ผมใช้ดึง n แถวที่ค่าในคอลัมน์ที่ระบุต่ำสุดออกมา เหมือนใน Excel ที่เรา Sort จากน้อยไปมากแล้วหยิบแถวบนสุดมา n แถว (Bottom N) แต่ตัวนี้สั่งบรรทัดเดียวจบเลยครับ

## Syntax

```excel
df.nsmallest(n, columns)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| n | Yes | int |  | จำนวนแถวที่ต้องการดึงออกมา เช่น 3 หมายถึงเอา 3 แถวที่ค่าน้อยที่สุด |
| columns | Yes | str \| list |  | ชื่อคอลัมน์ที่ใช้เป็นเกณฑ์หาค่าน้อยสุด เช่น 'sales' หรือใส่เป็น list ['sales', 'profit'] เพื่อใช้คอลัมน์ถัดไปตัดสินกรณีค่าแรกเท่ากัน |

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: หา 2 สินค้าที่ยอดขายน้อยที่สุด

```excel
df.nsmallest(2, 'sales')
```

**ผลลัพธ์:** `  product  sales
1       B    120
3       D    250`

ผมสั่งให้ดึง 2 แถวที่ค่าในคอลัมน์ sales น้อยที่สุดออกมา ได้สินค้า B (120) กับ D (250) ครับ สังเกตว่ามันคืนมาทั้งแถว เห็นชื่อ product ด้วย ไม่ใช่แค่ตัวเลข sales

### 2. ตัวอย่างที่ 2: หาพนักงานเงินเดือนต่ำสุด 3 คน

```excel
df.nsmallest(3, 'salary')
```

**ผลลัพธ์:** `  name  salary
3  Dan   28000
1  Bob   32000
4  Eve   41000`

คราวนี้ผมเปลี่ยน n เป็น 3 และเกณฑ์เป็นคอลัมน์ salary ผลที่ได้เรียงจากน้อยไปมากให้เลย คือ Dan (28000), Bob (32000), Eve (41000) ครับ เหมือน Sort เงินเดือนน้อยไปมากแล้วหยิบ 3 แถวแรก

### 3. ตัวอย่างที่ 3: ใช้หลายคอลัมน์ตัดสินกรณีค่าเท่ากัน (tie-break)

```excel
df.nsmallest(3, ['price', 'rating'])
```

**ผลลัพธ์:** `  city  price  rating
3  UBN     80     4.8
1  CNX    100     3.2
0  BKK    100     4.5`

อันนี้คือลูกเล่นที่ผมชอบครับ ใส่ columns เป็น list ['price', 'rating'] — pandas จะหาค่า price น้อยสุดก่อน แต่ถ้า price เท่ากัน (BKK กับ CNX เท่ากันที่ 100) มันจะใช้ rating มาตัดสินต่อ ตัวที่ rating น้อยกว่าจะมาก่อน เหมือน Sort หลายชั้นใน Excel เลย

## หมายเหตุเพิ่มเติม

- 💡 จำคู่หูไว้ครับ: nsmallest = หาค่าน้อยสุด (Bottom-N) ส่วน nlargest = หาค่ามากสุด (Top-N) สองตัวนี้ใช้แทนกันได้แค่สลับคำ ผลลัพธ์กลับด้านกันเลย

- ผลลัพธ์ของ nsmallest เรียงจากน้อยไปมากให้อัตโนมัติอยู่แล้ว ไม่ต้อง sort ซ้ำครับ และมันคืนมาเป็น DataFrame ทั้งแถว เอาไปต่อ .reset_index(drop=True) ได้เลยถ้าอยากให้ index เรียงใหม่สวยๆ

## คำถามที่พบบ่อย

**Q: nsmallest ต่างจาก sort_values().head() ยังไง ทำไมไม่ใช้อันนั้นไปเลย?**

ผลลัพธ์เหมือนกันครับ แต่ nsmallest เร็วกว่าเวลาตารางใหญ่ เพราะเบื้องหลังมันหาแค่ n ตัวที่เล็กที่สุดพอ ไม่ได้เรียงทุกแถวเหมือน sort_values ถ้าตารางมีเป็นล้านแถวแต่เราอยากได้แค่ 5 อันดับล่าง ผมใช้ nsmallest ครับ ประหยัดแรงเครื่องกว่าเยอะ

**Q: ถ้าค่าในคอลัมน์เท่ากันหลายแถว มันจะเลือกแถวไหน?**

โดยปกติมันจะหยิบตามลำดับที่เจอก่อนครับ แต่ถ้าอยากคุมให้ชัดเจน ผมแนะนำให้ใส่ columns เป็น list หลายคอลัมน์ เช่น ['price', 'rating'] เพื่อให้มีคอลัมน์ที่สองมาตัดสินกรณีคอลัมน์แรกเท่ากัน หรือจะใช้พารามิเตอร์ keep='first'/'last'/'all' เพื่อกำหนดว่าจะเก็บตัวซ้ำแบบไหนก็ได้ครับ

## แหล่งข้อมูลเพิ่มเติม

- [pandas DataFrame.nsmallest (official docs)](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.nsmallest.html) _(article)_

---

_Source: [https://www.thepexcel.com/functions/python/selection/pandas-nsmallest/](https://www.thepexcel.com/functions/python/selection/pandas-nsmallest/)_
