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

# pandas nlargest — ดึง N แถวที่ค่าสูงสุด (Top-N)

> nlargest ใน pandas ผมใช้ดึง N แถวที่ค่าในคอลัมน์ที่ระบุสูงที่สุดออกมาเลย เช่น Top 3 ลูกค้ายอดซื้อเยอ

## คำอธิบาย

nlargest ใน pandas ผมใช้ดึง N แถวที่ค่าในคอลัมน์ที่ระบุสูงที่สุดออกมาเลย เช่น Top 3 ลูกค้ายอดซื้อเยอะสุด ถ้าใครเคยทำ Sort มาก→น้อย ใน Excel แล้วเอา N แถวบนสุด ตัวนี้คือคำสั่งเดียวที่ทำงานนั้นให้จบครับ

## Syntax

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

## Arguments

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

## ตัวอย่าง

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

```excel
df.nlargest(3, 'sales')
```

**ผลลัพธ์:** `  product  sales
1       B    450
4       E    380
2       C    300`

ผมสั่งดึง 3 แถวที่คอลัมน์ sales สูงสุดออกมา ได้ B (450), E (380), C (300) เรียงจากมากไปน้อยให้พร้อมเลยครับ เหมือน Sort sales มาก→น้อย แล้วเอา 3 แถวบนสุด แต่จบในบรรทัดเดียว

### 2. ตัวอย่างที่ 2: ดึงแค่ 1 แถวที่คะแนนสูงสุด (Top 1)

```excel
df.nlargest(1, 'score')
```

**ผลลัพธ์:** `  name  score
1  Bee     92`

คราวนี้ผมขอแค่แชมป์อันดับ 1 ครับ ใส่ n=1 ก็ได้ Bee ที่คะแนน 92 ออกมาแถวเดียว วิธีนี้เร็วและชัดกว่าการ sort ทั้งตารางแล้วค่อยหยิบแถวแรก

### 3. ตัวอย่างที่ 3: หาค่าสูงสุดโดยใช้หลายคอลัมน์แก้กรณีเสมอ

```excel
df.nlargest(2, ['score', 'age'])
```

**ผลลัพธ์:** `  name  score  age
1  Bee     90   30
3  Dao     90   28`

พอใส่ columns เป็น list ['score','age'] pandas จะดูคะแนนก่อน ถ้าคะแนนเท่ากันค่อยใช้ age ตัดสินครับ ในตัวอย่างนี้มี 3 คนได้ 90 เท่ากัน ผมขอ 2 อันดับแรก ก็จะได้ Bee (อายุ 30) มาก่อน แล้วตามด้วย Dao (อายุ 28) เพราะอายุมากกว่า Aof

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

- 💡 ถ้าจะหา Top-N แยกตามกลุ่ม เช่น สินค้าขายดี 3 อันดับของแต่ละสาขา ผมจับ groupby มาต่อกับ nlargest แบบ df.groupby('สาขา').apply(lambda g: g.nlargest(3, 'sales')) ได้เลยครับ

- ถ้าข้อมูลคุณเป็น Series (คอลัมน์เดียว) ไม่ใช่ DataFrame ก็เรียก nlargest ได้เหมือนกัน แต่ไม่ต้องใส่ argument columns เช่น s.nlargest(3) เพราะมันมีคอลัมน์เดียวอยู่แล้วครับ

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

**Q: nlargest ต่างจาก sort_values().head() ยังไง ในเมื่อผลเหมือนกัน?**

ผลลัพธ์เหมือนกันครับ แต่เบื้องหลังต่างกัน nlargest ไม่ต้องเรียงทั้งตาราง มันหาเฉพาะ N ตัวใหญ่สุดเลยเร็วกว่าตอนข้อมูลเยอะแต่ N น้อย ส่วน sort_values ต้องเรียงทุกแถวก่อนแล้วค่อยตัดหัวมา ส่วนตัวผมเลยชอบ nlargest มากกว่าเพราะทั้งสั้นและสื่อความหมายตรงตัวว่า "เอาตัวใหญ่สุด N ตัว" ครับ

**Q: ถ้าอยากได้ค่าน้อยสุดแทนล่ะ ใช้อะไร?**

ใช้ nsmallest ครับ หน้าตาเหมือนกันเป๊ะ แค่เปลี่ยนชื่อ เช่น df.nsmallest(3, 'sales') ก็จะได้ 3 แถวที่ค่าน้อยสุดแทน เหมือน Sort น้อย→มาก แล้วเอา 3 แถวบนสุดนั่นแหละครับ

**Q: ตอนค่าเสมอกัน nlargest เลือกแถวไหน?**

โดยปกติถ้าค่าเท่ากันแล้วเกินโควต้า N pandas จะเก็บแถวที่เจอก่อน (เหมือน keep='first') ครับ ถ้าอยากคุมให้ชัดว่าเสมอแล้วใช้อะไรตัดสิน ผมแนะนำใส่ columns เป็น list หลายคอลัมน์ไปเลย จะได้ผลที่คาดเดาได้แน่นอนกว่า

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

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

---

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