Pandas nlargest dan nsmallest: Ambil Top N
TL;DR
Pandas nlargest ngambil n baris dengan nilai terbesar dari sebuah kolom, dan nsmallest ngambil n baris terkecil, keduanya langsung terurut tanpa perlu sort manual. Buat data besar dengan n kecil, cara ini lebih cepat dari sort_values lalu head karena nggak ngurutin seluruh baris. Kombinasikan sama groupby buat ngambil Top N per kategori, dan atur argumen keep buat ngendaliin baris yang nilainya seri.
nlargest dan nsmallest di Pandas ngambil sejumlah baris teratas atau terbawah berdasarkan nilai satu kolom, tanpa perlu sort dulu baru dipotong. Satu baris kode, langsung dapat Top N.
Kerjaan kayak gini muncul terus. 5 produk paling laris, 10 pelanggan paling boros, 3 cabang paling sepi.
Kamu bisa aja pakai sort_values lalu head. Tapi ada cara yang lebih pendek, dan buat data gede juga lebih cepat.
Apa itu nlargest dan nsmallest di Pandas?
nlargest(n, kolom) ngembaliin n baris dengan nilai terbesar di kolom itu, udah urut dari paling gede. nsmallest(n, kolom) kebalikannya, ngambil n baris dengan nilai terkecil. Keduanya jalan di DataFrame maupun Series, dan hasilnya langsung terurut tanpa langkah tambahan.
Bedanya sama sekadar cari nilai maksimum: max cuma ngasih satu angka. nlargest ngasih barisnya utuh, lengkap sama kolom lain kayak nama produk dan tanggal.
Gimana sintaks nlargest dan nsmallest?
df.nlargest(n, columns, keep='first')
df.nsmallest(n, columns, keep='first')
- n: berapa baris yang mau diambil.
- columns: nama kolom acuan buat ngurutin. Bisa satu nama, bisa list.
- keep: cara nangani nilai seri. Pilihannya 'first', 'last', atau 'all'.
Contoh ambil 5 produk dengan omzet tertinggi:
top5 = df.nlargest(5, 'omzet')
print(top5)
Buat Series, argumen kolom nggak perlu:
df['omzet'].nlargest(5)
Apa bedanya nlargest sama sort_values().head()?
Hasilnya sama, tapi cara kerjanya beda. sort_values ngurutin seluruh baris dulu, baru head motong yang atas. nlargest cuma jaga n nilai teratas selama proses, jadi nggak ngurutin semua data.
| Aspek | nlargest(5, 'omzet') | sort_values('omzet', ascending=False).head(5) |
|---|---|---|
| Panjang kode | Pendek | Lebih panjang |
| Ngurutin semua baris | Nggak | Iya |
| Kontrol nilai seri | Lewat keep | Manual |
| Data besar + n kecil | Lebih cepat | Lebih lambat |
Buat data kecil, bedanya nggak kerasa. Buat DataFrame jutaan baris yang cuma butuh Top 10, nlargest ngirit kerjaan karena nggak ngurutin sisa baris yang nggak kepakai. Kalau kamu sering pakai sort_values, cek juga cara urut DataFrame dengan sort_values biar tau kapan masing-masing lebih pas.
Gimana ambil Top N berdasarkan beberapa kolom?
Kasih list ke argumen columns. Pandas ngurutin pakai kolom pertama dulu, kalau seri baru pakai kolom kedua sebagai penentu.
df.nlargest(5, ['omzet', 'qty'])
Di sini, kalau ada dua baris dengan omzet sama, yang qty-nya lebih besar menang. Urutan nama kolom di list nentuin prioritas.
Gimana ambil Top N per grup?
Gabungin groupby sama apply. Misalnya mau 2 produk terlaris di tiap kategori:
top2_per_kategori = (
df.groupby('kategori', group_keys=False)
.apply(lambda g: g.nlargest(2, 'omzet'))
)
group_keys=False bikin hasilnya rapi tanpa index kategori yang dobel. Buat dasar groupby, ada panduan pandas groupby yang ngebahas agregasi ala pivot.
Nampilin nomor peringkat bareng Top N
Laporan sering butuh kolom peringkat, bukan cuma urutan baris. Setelah nlargest, tambahin kolom rank pakai index biasa:
top10 = omzet_produk.nlargest(10, 'omzet').reset_index(drop=True)
top10['peringkat'] = top10.index + 1
reset_index(drop=True) ngerapiin nomor baris jadi 0 sampai 9, lalu ditambah 1 biar mulai dari peringkat 1. Hasilnya siap ditempel ke laporan atau diekspor ke Excel.
Contoh kasus: produk terlaris Toko Berkah
Toko Berkah, UMKM kelontong di dataset latihan ngulikdata, punya 12.480 baris transaksi selama 2025. Tiap baris berisi nama produk, qty, dan omzet per struk.
Buat nemu 5 produk penyumbang omzet terbesar:
omzet_produk = df.groupby('produk')['omzet'].sum().reset_index()
top5 = omzet_produk.nlargest(5, 'omzet')
Hasilnya, minyak goreng 2 liter jadi juara dengan total Rp48.700.000, disusul beras 5 kg di Rp41.200.000. Lima produk teratas ini nyumbang 34% dari total omzet setahun, padahal jenisnya cuma 5 dari 214 produk yang dijual.
Angka 34% ini yang bikin keputusan stok jadi jelas. Lima barang ini nggak boleh kosong di rak, soalnya telat restok sehari aja langsung kepotong dari sepertiga pemasukan toko. Buat lihat produk paling sepi, tinggal ganti ke nsmallest.
top5_sepi = omzet_produk.nsmallest(5, 'omzet')
Kesalahan umum saat pakai nlargest dan nsmallest
1. Lupa kolomnya harus numerik
nlargest cuma jalan di kolom angka. Kalau kolomnya masih teks (misalnya '48.700.000' dengan titik ribuan), hasilnya ngaco atau malah error. Ubah dulu tipenya pakai astype atau pd.to_numeric.
2. Nyangka hasilnya acak saat ada nilai seri
Kalau beberapa baris punya nilai sama persis, keep yang nentuin mana yang diambil. Default 'first' ambil yang muncul duluan. Kalau mau semua baris seri ikut walau jumlahnya lewat dari n, pakai keep='all'.
3. Pakai sort lalu head buat data raksasa
Buat DataFrame gede yang cuma butuh sedikit baris teratas, sort_values ngurutin semuanya sia-sia. nlargest lebih hemat. Kebalikannya, kalau kamu butuh seluruh data terurut, ya sort_values yang bener.
FAQ
Apa beda nlargest dan max di Pandas?
max cuma ngembaliin satu nilai tertinggi dari sebuah kolom, tanpa info baris lain. nlargest ngembaliin barisnya utuh, jumlahnya sesuai n yang kamu minta, dan udah terurut dari paling besar. Kalau kamu butuh tau produk apa yang paling laris beserta detailnya, pakai nlargest. Kalau cuma butuh angka tertingginya, max cukup.
Apakah nlargest lebih cepat dari sort_values?
Buat data besar dengan n kecil, iya. nlargest nggak ngurutin seluruh baris, cukup jaga n nilai teratas selama proses. sort_values ngurutin semua baris dulu baru dipotong, jadi kerjaannya lebih berat. Buat data kecil, bedanya nggak kerasa dan keduanya sama aja cepatnya.
Gimana cara ambil Top N per grup pakai nlargest?
Gabungin groupby dengan apply, lalu panggil nlargest di dalam fungsinya. Contohnya df.groupby('kategori', group_keys=False).apply(lambda g: g.nlargest(2, 'omzet')). Ini ngambil 2 baris teratas di tiap kategori. Set group_keys=False biar hasilnya nggak punya index grup yang dobel.
Apa fungsi argumen keep di nlargest?
keep ngatur cara nangani baris yang nilainya seri di batas n. 'first' ambil yang muncul duluan, 'last' ambil yang terakhir, dan 'all' ikutin semua baris seri walau totalnya jadi lebih dari n. Default-nya 'first'. Pakai 'all' kalau kamu nggak mau ada baris seri yang kebuang diam-diam.
Penutup
- nlargest dan nsmallest ngambil Top N atau Bottom N dari satu kolom, langsung terurut, tanpa sort manual.
- Buat data besar dengan n kecil, keduanya lebih cepat dari sort_values lalu head.
- Kombinasikan sama groupby buat Top N per kategori, dan atur keep buat ngendaliin nilai seri.
Coba sekarang: ambil satu dataset penjualan yang kamu punya, cari 5 baris omzet tertinggi pakai nlargest. Bandingkan sama nsmallest buat lihat yang paling sepi.
Fungsi ini setara LARGE dan SMALL di spreadsheet. Cek referensi fungsi LARGE Excel dan fungsi SMALL Excel buat lihat versi rumusnya. Detail parameter lengkap ada di dokumentasi resmi pandas nlargest.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
Seaborn Pairplot: Cara Eksplorasi Data Cepat dengan Python (2026)
Satu baris kode buat lihat hubungan semua kolom numerik sekaligus. Ini cara pakai seaborn pairplot buat eksplorasi data, lengkap dengan contoh dan cara bacanya.
Seaborn Heatmap: Visualisasi Matriks Korelasi (2026)
Seaborn heatmap ngubah matriks korelasi jadi grid warna, jadi kamu bisa langsung lihat variabel mana yang saling terkait. Ini cara bikinnya dari df.corr() sampai atur warna dan angka.
Seaborn untuk Pemula: Visualisasi Statistik di Python (2026)
Seaborn bikin chart statistik yang rapi cuma dengan satu baris kode. Ini dasar-dasarnya buat pemula, dari histogram sampai heatmap.