Thep Excel

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

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

>_
df.nsmallest(n, columns)

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

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าDataFrame

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

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

Additional Notes

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

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

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

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

Examples

ตัวอย่างที่ 1: หา 2 สินค้าที่ยอดขายน้อยที่สุดdf.nsmallest(2, 'sales')

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

>_
df.nsmallest(2, 'sales')

ผลลัพธ์ 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 แถวแรก

>_
df.nsmallest(3, 'salary')

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

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

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

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

ฟังก์ชันนี้pandas nsmallestSelection
Inspection (1)
pandas head

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

Selection (1)
pandas nlargest

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

Transform (1)
pandas sort_values

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

Comments

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