nsmallest ใน pandas ผมใช้ดึง n แถวที่ค่าในคอลัมน์ที่ระบุต่ำสุดออกมา เหมือนใน Excel ที่เรา Sort จากน้อยไปมากแล้วหยิบแถวบนสุดมา n แถว (Bottom N) แต่ตัวนี้สั่งบรรทัดเดียวจบเลยครับ
df.nsmallest(n, columns)
df.nsmallest(n, columns)
DataFrame
คืนเป็น DataFrame ที่มี n แถว เรียงจากค่าน้อยไปมากตามคอลัมน์ที่ระบุ — ได้ครบทุกคอลัมน์ของแถวนั้น ไม่ใช่แค่ค่าที่ใช้เปรียบเทียบครับ เอาไปใช้ต่อหรือ chain คำสั่งอื่นได้เลย
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| n | int | Yes | จำนวนแถวที่ต้องการดึงออกมา เช่น 3 หมายถึงเอา 3 แถวที่ค่าน้อยที่สุด | |
| columns | str | list | Yes | ชื่อคอลัมน์ที่ใช้เป็นเกณฑ์หาค่าน้อยสุด เช่น ‘sales’ หรือใส่เป็น list [‘sales’, ‘profit’] เพื่อใช้คอลัมน์ถัดไปตัดสินกรณีค่าแรกเท่ากัน |
df.nsmallest(2, 'sales')df.nsmallest(2, 'sales')
product sales
1 B 120
3 D 250
df.nsmallest(3, 'salary')df.nsmallest(3, 'salary')
name salary
3 Dan 28000
1 Bob 32000
4 Eve 41000
df.nsmallest(3, ['price', 'rating'])df.nsmallest(3, ['price', 'rating'])
city price rating
3 UBN 80 4.8
1 CNX 100 3.2
0 BKK 100 4.5
ผลลัพธ์เหมือนกันครับ แต่ nsmallest เร็วกว่าเวลาตารางใหญ่ เพราะเบื้องหลังมันหาแค่ n ตัวที่เล็กที่สุดพอ ไม่ได้เรียงทุกแถวเหมือน sort_values ถ้าตารางมีเป็นล้านแถวแต่เราอยากได้แค่ 5 อันดับล่าง ผมใช้ nsmallest ครับ ประหยัดแรงเครื่องกว่าเยอะ
โดยปกติมันจะหยิบตามลำดับที่เจอก่อนครับ แต่ถ้าอยากคุมให้ชัดเจน ผมแนะนำให้ใส่ columns เป็น list หลายคอลัมน์ เช่น [‘price’, ‘rating’] เพื่อให้มีคอลัมน์ที่สองมาตัดสินกรณีคอลัมน์แรกเท่ากัน หรือจะใช้พารามิเตอร์ keep=’first’/’last’/’all’ เพื่อกำหนดว่าจะเก็บตัวซ้ำแบบไหนก็ได้ครับ
เวลาผมอ่านโค้ด pandas ที่ AI เขียนมา แล้วเจอ df.nsmallest(…) ให้นึกภาพง่ายๆ ว่ามันคือการหา “แถวที่ค่าน้อยที่สุด” เช่น สินค้าขายแย่ที่สุด 3 อันดับ หรือพนักงานเงินเดือนต่ำสุด 5 คนครับ
ถ้าเทียบกับ Excel มันคือการ Sort คอลัมน์จากน้อยไปมาก แล้วหยิบเฉพาะแถวบนสุดมา n แถว (Bottom N) นั่นเอง ต่างกันตรงที่ pandas สั่งแค่บรรทัดเดียว ไม่ต้อง sort ทั้งตารางก่อนแล้วค่อยตัด
ที่เจ๋งคือ nsmallest คืน “ทั้งแถว” กลับมาเป็น DataFrame ครับ ไม่ใช่แค่ค่าน้อยสุด — เพราะฉะนั้นเราจะเห็นข้อมูลคอลัมน์อื่นๆ ของแถวนั้นครบ เอาไปใช้ต่อได้เลย และมันเร็วกว่าการ sort_values ทั้งตารางด้วย เพราะเบื้องหลังมันหาแค่ n ตัวที่เล็กที่สุดพอ ไม่ได้เรียงทุกแถว
ส่วนตัวผมใช้ nsmallest บ่อยมากตอนทำรายงานหา “อันดับท้ายตาราง” เช่น top 5 สินค้าขายไม่ออก หรือสาขาที่กำไรน้อยสุด ขอแค่จำคู่หูของมันคือ nlargest (หาค่ามากสุด) ไว้ด้วยก็พอครับ 😎