Thep Excel

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

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

df.nsmallest(n, columns)

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

df.nsmallest(n, columns)

คืนค่า (Returns)
DataFrame

คืนเป็น DataFrame ที่มี n แถว เรียงจากค่าน้อยไปมากตามคอลัมน์ที่ระบุ — ได้ครบทุกคอลัมน์ของแถวนั้น ไม่ใช่แค่ค่าที่ใช้เปรียบเทียบครับ เอาไปใช้ต่อหรือ chain คำสั่งอื่นได้เลย

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

Examples

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

df.nsmallest(2, 'sales')

Result:

product sales
1 B 120
3 D 250

ตัวอย่างที่ 2: หาพนักงานเงินเดือนต่ำสุด 3 คน
df.nsmallest(3, 'salary')
คราวนี้ผมเปลี่ยน n เป็น 3 และเกณฑ์เป็นคอลัมน์ salary ผลที่ได้เรียงจากน้อยไปมากให้เลย คือ Dan (28000), Bob (32000), Eve (41000) ครับ เหมือน Sort เงินเดือนน้อยไปมากแล้วหยิบ 3 แถวแรก
Python Code:

df.nsmallest(3, 'salary')

Result:

name salary
3 Dan 28000
1 Bob 32000
4 Eve 41000

ตัวอย่างที่ 3: ใช้หลายคอลัมน์ตัดสินกรณีค่าเท่ากัน (tie-break)
df.nsmallest(3, ['price', 'rating'])
อันนี้คือลูกเล่นที่ผมชอบครับ ใส่ columns เป็น list ['price', 'rating'] — pandas จะหาค่า price น้อยสุดก่อน แต่ถ้า price เท่ากัน (BKK กับ CNX เท่ากันที่ 100) มันจะใช้ rating มาตัดสินต่อ ตัวที่ rating น้อยกว่าจะมาก่อน เหมือน Sort หลายชั้นใน Excel เลย
Python Code:

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

Result:

city price rating
3 UBN 80 4.8
1 CNX 100 3.2
0 BKK 100 4.5

FAQs

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

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

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

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

Resources & Related

Additional Notes

เวลาผมอ่านโค้ด pandas ที่ AI เขียนมา แล้วเจอ df.nsmallest(…) ให้นึกภาพง่ายๆ ว่ามันคือการหา “แถวที่ค่าน้อยที่สุด” เช่น สินค้าขายแย่ที่สุด 3 อันดับ หรือพนักงานเงินเดือนต่ำสุด 5 คนครับ

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

ที่เจ๋งคือ nsmallest คืน “ทั้งแถว” กลับมาเป็น DataFrame ครับ ไม่ใช่แค่ค่าน้อยสุด — เพราะฉะนั้นเราจะเห็นข้อมูลคอลัมน์อื่นๆ ของแถวนั้นครบ เอาไปใช้ต่อได้เลย และมันเร็วกว่าการ sort_values ทั้งตารางด้วย เพราะเบื้องหลังมันหาแค่ n ตัวที่เล็กที่สุดพอ ไม่ได้เรียงทุกแถว

ส่วนตัวผมใช้ nsmallest บ่อยมากตอนทำรายงานหา “อันดับท้ายตาราง” เช่น top 5 สินค้าขายไม่ออก หรือสาขาที่กำไรน้อยสุด ขอแค่จำคู่หูของมันคือ nlargest (หาค่ามากสุด) ไว้ด้วยก็พอครับ 😎

Leave a Reply

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