---
title: pandas sort_values — เรียงแถวของ DataFrame ตามค่าใน column
url: https://www.thepexcel.com/functions/python/transform/pandas-sort-values/
type: function-explainer
program: Python
syntax: df.sort_values(by)
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 3
  usefulness: 5
---

# pandas sort_values — เรียงแถวของ DataFrame ตามค่าใน column

> df.sort_values() ใน pandas ผมใช้สำหรับเรียงลำดับแถวใน DataFrame ตามค่าของคอลัมน์ที่กำหนด เรียงจากน้อ

## คำอธิบาย

df.sort_values() ใน pandas ผมใช้สำหรับเรียงลำดับแถวใน DataFrame ตามค่าของคอลัมน์ที่กำหนด เรียงจากน้อยไปมากหรือมากไปน้อยก็ได้ และยังเรียงตามหลายคอลัมน์พร้อมกันได้ด้วยครับ

## Syntax

```excel
df.sort_values(by)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| by | Yes | str \| list |  | ชื่อคอลัมน์ที่ใช้เรียง เช่น 'score' หรือ ['dept', 'score'] สำหรับเรียงตามหลายคอลัมน์ |
| ascending | No | bool \| list | True | True=เรียงจากน้อยไปมาก, False=มากไปน้อย ถ้า by เป็น list ใส่ list ได้เช่น [True, False] เพื่อกำหนดแต่ละคอลัมน์ต่างกัน |
| inplace | No | bool | False | ถ้า True จะแก้ไข DataFrame ต้นฉบับเลย ไม่คืน DataFrame ใหม่ ผมแนะนำให้ใช้ False แล้วเก็บในตัวแปรใหม่ครับ |
| na_position | No | str | 'last' | ตำแหน่งของ NaN ในผลลัพธ์ 'last'=NaN ไปอยู่ท้าย (default), 'first'=NaN อยู่หัว |
| ignore_index | No | bool | False | ถ้า True จะ reset index ของผลลัพธ์ให้เริ่มจาก 0 ใหม่ ไม่ต้องต่อด้วย .reset_index() แยก |

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: เรียงจากคะแนนน้อยไปมาก

```excel
df.sort_values('score')
```

**ผลลัพธ์:** `   name  score
1   Bob     60
3   Dan     75
0   Ana     85
2  Cara     92`

ผมเรียงตามคอลัมน์ score จากน้อยไปมากครับ ได้ Bob (60), Dan (75), Ana (85), Cara (92) ตามลำดับ index เดิมยังอยู่ครบ แค่เรียงใหม่

### 2. ตัวอย่างที่ 2: เรียงจากมากไปน้อยเพื่อหา top scorer

```excel
df.sort_values('score', ascending=False)
```

**ผลลัพธ์:** `   name  score
2  Cara     92
0   Ana     85
3   Dan     75
1   Bob     60`

ใส่ ascending=False เพื่อกลับทิศครับ ได้ Cara (92), Ana (85), Dan (75), Bob (60) — ดูว่าใครได้คะแนนสูงสุดได้เลย ต่อด้วย .head(1) ก็ได้อันดับ 1 ทันที

### 3. ตัวอย่างที่ 3: เรียงตามหลายคอลัมน์

```excel
df.sort_values(['dept', 'score'], ascending=[True, False])
```

**ผลลัพธ์:** `  dept  score
3   HR     75
1   HR     60
2   IT     92
0   IT     85`

เรียงตาม dept ก่อน (A→Z) แล้ว tiebreak ด้วย score จากมากไปน้อยครับ ในกลุ่ม HR จะได้ 75 ก่อน 60 และในกลุ่ม IT จะได้ 92 ก่อน 85 — ใช้รายงานแบบจัดกลุ่มได้เลย

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

- ผมแนะนำให้ใช้ ignore_index=True ทุกครั้งที่ sort แล้วจะ export ออก เช่น df.sort_values('score', ascending=False, ignore_index=True) ได้ index 0,1,2,3 เรียงสวยในไฟล์ที่ export ครับ

- ส่วนตัวผมใช้ .sort_values().head(N) คู่กันบ่อยมากสำหรับหา top N เช่น df.sort_values('revenue', ascending=False).head(10) ได้ 10 อันดับยอดขายสูงสุดทันที สั้นและชัดเจนครับ

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

**Q: sort_values แล้ว index มันยังเป็นเลขเดิม จะให้เริ่ม 0 ใหม่ทำยังไง?**

มีสองวิธีครับ วิธีแรกต่อด้วย .reset_index(drop=True) เช่น df.sort_values('score').reset_index(drop=True) ใส่ drop=True เพื่อไม่ให้ index เดิมกลายเป็นคอลัมน์ใหม่ วิธีที่สองใส่ ignore_index=True ตอน sort_values เลย สั้นกว่าครับ

**Q: ค่า NaN จะไปอยู่ตรงไหนหลัง sort?**

ค่า default คือ NaN ไปอยู่ท้ายเสมอครับ ไม่ว่าจะเรียงขึ้นหรือลง ถ้าอยากให้ NaN อยู่หัวให้ใส่ na_position='first' เพิ่มเข้าไป ผมมักปล่อย default ไว้เพราะอยากเห็นข้อมูลจริงก่อนครับ

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

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

---

_Source: [https://www.thepexcel.com/functions/python/transform/pandas-sort-values/](https://www.thepexcel.com/functions/python/transform/pandas-sort-values/)_
