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