Thep Excel

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

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

df.nlargest(n, columns)

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

df.nlargest(n, columns)

คืนค่า (Returns)
DataFrame

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

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

Examples

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

df.nlargest(3, 'sales')

Result:

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 ทั้งตารางแล้วค่อยหยิบแถวแรก
Python Code:

df.nlargest(1, 'score')

Result:

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
Python Code:

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

Result:

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

Additional Notes

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

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

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

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

Leave a Reply

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