Thep Excel

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

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

>_
df.sort_values(by)

ความนิยม5/10
ความยาก3/10
ประโยชน์5/10

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าDataFrame

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

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

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

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

Examples

ตัวอย่างที่ 1: เรียงจากคะแนนน้อยไปมากdf.sort_values('score')

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

>_
df.sort_values('score')

ผลลัพธ์ name score
1 Bob 60
3 Dan 75
0 Ana 85
2 Cara 92
ตัวอย่างที่ 2: เรียงจากมากไปน้อยเพื่อหา top scorerdf.sort_values('score', ascending=False)

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

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

ผลลัพธ์ 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 — ใช้รายงานแบบจัดกลุ่มได้เลย

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

ผลลัพธ์ 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

ฟังก์ชันที่ผู้เขียนโยงไว้กับ pandas sort_values จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้pandas sort_valuesTransform
Transform (3)
numpy sort

np.sort ผมใช้เรียงค่าใน array ของ numpy จากน้อยไปมาก แล้วคืน array ใหม่ที่เรียงแล้วออกมา (ของเดิมไม่ถูกแตะต้อง) ถ้าใครคุ้นกับ SORT หรือเมนู Data > Sort ใน Excel บอกเลยว่าตัวนี้คือสายเดียวกันเลยครับ

pandas reset_index

reset_index ผมใช้สำหรับเปลี่ยน index ของ DataFrame กลับมาเป็นคอลัมน์ธรรมดา แล้วเซ็ต index ใหม่เป็น 0, 1, 2, … ตามลำดับ — ส่วนใหญ่จะโผล่หลัง groupby ทุกครั้งที่อยากนำผลลัพธ์ไปใช้งานต่อครับ

pandas set_index

set_index ใน pandas ผมใช้สำหรับตั้งคอลัมน์ใดคอลัมน์หนึ่ง (หรือหลายคอลัมน์) ให้กลายเป็น index หลักของ DataFrame เหมือนกับการกำหนดคีย์หลักให้ตาราง เพื่อให้ค้นหาข้อมูลด้วย .loc[] ได้อย่างรวดเร็วและตรงจุดครับ

Inspection (2)
pandas head

head ใน pandas ผมใช้สำหรับดูข้อมูลแถวแรกๆ ของ DataFrame เพื่อเช็กว่าโหลดข้อมูลมาถูกต้องหรือเปล่า คล้ายกับการ scroll ไปดูบนสุดของตาราง Excel เลยครับ

pandas tail

df.tail(n) ผมใช้สำหรับดึงแถวท้ายสุด n แถวของ DataFrame ออกมาดูเร็วๆ ครับ เหมือนตอนเปิด Excel แล้วกด Ctrl+End เพื่อเลื่อนไปดูข้อมูลแถวล่างสุดของตาราง — มันคือคู่หูของ head ที่ดูแถวบนสุดนั่นเอง

Selection (2)
pandas nlargest

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

pandas nsmallest

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

Cleaning (1)
pandas fillna

df.fillna() ใน pandas ผมใช้สำหรับเติมค่า NaN ที่หายไปใน DataFrame ด้วยค่าที่กำหนด เช่น 0, ค่าเฉลี่ย หรือค่าจากแถวก่อนหน้า เป็นขั้นตอนสำคัญในการทำความสะอาดข้อมูลก่อนวิเคราะห์หรือส่งเข้า model ครับ

Aggregation (1)
pandas groupby

groupby ใน pandas ผมใช้สำหรับจัดกลุ่มข้อมูลใน DataFrame แล้วคำนวณค่าสรุปในแต่ละกลุ่ม เช่น หาผลรวม ค่าเฉลี่ย หรือค่าสถิติต่างๆ ตามหมวดหมู่ที่กำหนด ถ้าใครเคยใช้ PivotTable ใน Excel มาก่อน บอกเลยว่าตัวนี้คือเครื่องมือสายเดียวกันเลยครับ

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่