Thep Excel

pandas nlargestดึง N แถวที่ค่าสูงสุด (Top-N)

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

>_
df.nlargest(n, columns)

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

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าDataFrame

คืนเป็น DataFrame ก้อนใหม่ที่มีเฉพาะ N แถวค่าสูงสุด เรียงจากมากไปน้อยมาให้เรียบร้อย เอาไปทำงานต่อได้ทันที (index เดิมของแถวที่ถูกเลือกยังติดมาด้วยครับ)

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

Additional Notes

เวลาผมเจอโจทย์ทำนองว่า “ขอ Top 5 สินค้าขายดี” หรือ “ลูกค้า 10 คนที่จ่ายเยอะสุด” คำสั่งแรกที่ผมนึกถึงคือ nlargest ครับ

วิธีคิดง่ายๆ ในมุมคน Excel คือ มันเหมือนเรากด Sort คอลัมน์นั้นจากมากไปน้อย แล้วหยิบเอา N แถวบนสุดมา — แต่ nlargest ทำให้จบในบรรทัดเดียว ไม่ต้อง sort ทั้งตารางก่อนแล้วค่อยมา head เอง

ที่เจ๋งคือเบื้องหลังมันไม่ได้เรียงทั้งตารางจริงๆ ครับ มันใช้อัลกอริทึมที่เร็วกว่าการ sort เต็มๆ (โดยเฉพาะตอนข้อมูลเยอะแต่ N น้อย) เลยประหยัดแรงเครื่องไปได้เยอะ และผลลัพธ์ที่ได้ก็ยังเรียงจากมากไปน้อยมาให้เรียบร้อย พร้อมใช้ต่อทันที ✨

ส่วนตัวผมใช้ตัวนี้แทนการเขียน sort_values(ascending=False).head(n) เกือบทุกครั้งเลยครับ สั้นกว่า อ่านง่ายกว่า แล้วก็สื่อความหมายตรงตัวว่า “เอาตัวใหญ่สุด N ตัว” 😎

Examples

ตัวอย่างที่ 1: ดึง 3 สินค้าที่ยอดขายสูงสุดdf.nlargest(3, 'sales')

ผมสั่งดึง 3 แถวที่คอลัมน์ sales สูงสุดออกมา ได้ B (450), E (380), C (300) เรียงจากมากไปน้อยให้พร้อมเลยครับ เหมือน Sort sales มาก→น้อย แล้วเอา 3 แถวบนสุด แต่จบในบรรทัดเดียว

>_
df.nlargest(3, 'sales')

ผลลัพธ์ product sales
1 B 450
4 E 380
2 C 300
ตัวอย่างที่ 2: ดึงแค่ 1 แถวที่คะแนนสูงสุด (Top 1)df.nlargest(1, 'score')

คราวนี้ผมขอแค่แชมป์อันดับ 1 ครับ ใส่ n=1 ก็ได้ Bee ที่คะแนน 92 ออกมาแถวเดียว วิธีนี้เร็วและชัดกว่าการ sort ทั้งตารางแล้วค่อยหยิบแถวแรก

>_
df.nlargest(1, 'score')

ผลลัพธ์ name score
1 Bee 92
ตัวอย่างที่ 3: หาค่าสูงสุดโดยใช้หลายคอลัมน์แก้กรณีเสมอdf.nlargest(2, ['score', 'age'])

พอใส่ columns เป็น list ['score','age'] pandas จะดูคะแนนก่อน ถ้าคะแนนเท่ากันค่อยใช้ age ตัดสินครับ ในตัวอย่างนี้มี 3 คนได้ 90 เท่ากัน ผมขอ 2 อันดับแรก ก็จะได้ Bee (อายุ 30) มาก่อน แล้วตามด้วย Dao (อายุ 28) เพราะอายุมากกว่า Aof

>_
df.nlargest(2, ['score', 'age'])

ผลลัพธ์ name score age
1 Bee 90 30
3 Dao 90 28

FAQs

nlargest ต่างจาก sort_values().head() ยังไง ในเมื่อผลเหมือนกัน?+

ผลลัพธ์เหมือนกันครับ แต่เบื้องหลังต่างกัน nlargest ไม่ต้องเรียงทั้งตาราง มันหาเฉพาะ N ตัวใหญ่สุดเลยเร็วกว่าตอนข้อมูลเยอะแต่ N น้อย ส่วน sort_values ต้องเรียงทุกแถวก่อนแล้วค่อยตัดหัวมา ส่วนตัวผมเลยชอบ nlargest มากกว่าเพราะทั้งสั้นและสื่อความหมายตรงตัวว่า "เอาตัวใหญ่สุด N ตัว" ครับ

ถ้าอยากได้ค่าน้อยสุดแทนล่ะ ใช้อะไร?+

ใช้ nsmallest ครับ หน้าตาเหมือนกันเป๊ะ แค่เปลี่ยนชื่อ เช่น df.nsmallest(3, 'sales') ก็จะได้ 3 แถวที่ค่าน้อยสุดแทน เหมือน Sort น้อย→มาก แล้วเอา 3 แถวบนสุดนั่นแหละครับ

ตอนค่าเสมอกัน nlargest เลือกแถวไหน?+

โดยปกติถ้าค่าเท่ากันแล้วเกินโควต้า N pandas จะเก็บแถวที่เจอก่อน (เหมือน keep='first') ครับ ถ้าอยากคุมให้ชัดว่าเสมอแล้วใช้อะไรตัดสิน ผมแนะนำใส่ columns เป็น list หลายคอลัมน์ไปเลย จะได้ผลที่คาดเดาได้แน่นอนกว่า

Resources & Related

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

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

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

Selection (1)
pandas nsmallest

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

Transform (1)
pandas sort_values

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

Comments

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