Thep Excel

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

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

df.sort_values(by)

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

df.sort_values(by)

คืนค่า (Returns)
DataFrame

คืนเป็น DataFrame ใหม่ที่เรียงแล้วครับ DataFrame ต้นฉบับไม่เปลี่ยน index เดิมยังอยู่ ถ้าอยากให้ index เริ่มใหม่จาก 0 ให้ใส่ ignore_index=True หรือต่อด้วย .reset_index(drop=True)

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

Examples

ตัวอย่างที่ 1: เรียงจากคะแนนน้อยไปมาก
df.sort_values('score')
ผมเรียงตามคอลัมน์ score จากน้อยไปมากครับ ได้ Bob (60), Dan (75), Ana (85), Cara (92) ตามลำดับ index เดิมยังอยู่ครบ แค่เรียงใหม่
Python Code:

df.sort_values('score')

Result:

name score
1 Bob 60
3 Dan 75
0 Ana 85
2 Cara 92

ตัวอย่างที่ 2: เรียงจากมากไปน้อยเพื่อหา top scorer
df.sort_values('score', ascending=False)
ใส่ ascending=False เพื่อกลับทิศครับ ได้ Cara (92), Ana (85), Dan (75), Bob (60) — ดูว่าใครได้คะแนนสูงสุดได้เลย ต่อด้วย .head(1) ก็ได้อันดับ 1 ทันที
Python Code:

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

Result:

name score
2 Cara 92
0 Ana 85
3 Dan 75
1 Bob 60

ตัวอย่างที่ 3: เรียงตามหลายคอลัมน์
df.sort_values(['dept', 'score'], ascending=[True, False])
เรียงตาม dept ก่อน (A→Z) แล้ว tiebreak ด้วย score จากมากไปน้อยครับ ในกลุ่ม HR จะได้ 75 ก่อน 60 และในกลุ่ม IT จะได้ 92 ก่อน 85 — ใช้รายงานแบบจัดกลุ่มได้เลย
Python Code:

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

Result:

dept score
3 HR 75
1 HR 60
2 IT 92
0 IT 85

FAQs

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

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

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

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

Resources & Related

Additional Notes

df.sort_values() เป็นฟังก์ชันที่ผมใช้ตลอดเวลาตอนเตรียมข้อมูลเพื่อแสดงผลหรือวิเคราะห์ครับ 😎

รับชื่อคอลัมน์ (by) แล้วเรียงแถวทั้ง DataFrame ตามค่าในคอลัมน์นั้น ค่า default เรียงจากน้อยไปมาก (ascending=True) ใส่ ascending=False เพื่อกลับทิศได้ทันที และถ้าส่ง list ของคอลัมน์เข้าไปจะเรียงหลักแรกก่อน แล้ว tiebreak ด้วยคอลัมน์ถัดไป

ที่เจ๋งคือสามารถกำหนดทิศทางการเรียงของแต่ละคอลัมน์ต่างกันได้ด้วย list เช่น ascending=[True, False] เรียงคอลัมน์แรก A→Z และคอลัมน์สอง Z→A พร้อมกัน ✨

ส่วนตัวผมใช้ sort_values บ่อยมากตอนหา top N เช่น ต้องการ 5 สินค้าขายดีสุด ก็ sort แล้วต่อด้วย .head(5) จบครับ อีกกรณีคือก่อน reset_index เพื่อให้แถวเรียงสวยก่อน export

Leave a Reply

Your email address will not be published. Required fields are marked *