min-max-dan-count mencari satu nilai ekstrem lewat max() dan idxmax(), tetapi pertanyaan bisnis jarang berhenti di satu pemenang. Dashboard biasanya meminta lima produk terlaris, sepuluh kota dengan pertumbuhan tercepat, atau peringkat seluruh pesaing dalam satu kolom. pandas menyediakan tiga alat untuk kebutuhan itu: rank() yang memberi nomor peringkat untuk setiap baris, nlargest() dan nsmallest() yang memotong tabel menjadi Top-N, dan nunique() yang menghitung kekayaan nilai. Chapter ini membahas ketiganya beserta aturan menangani nilai kembar.
rank() dan Nilai Kembar #
rank() memberi nomor urut berdasarkan posisi nilai di antara sesamanya; secara bawaan peringkat menaik dan rata-rata dipakai untuk nilai kembar. Parameter ascending=False membalik arah sehingga nilai terbesar mendapat peringkat satu — bentuk yang paling sering diminta laporan. Nilai kembar seperti dua produk dengan 85 unit memicu perbedaan metode: bawaan method="average" memberi keduanya 2.5, sedangkan method="min" memberi keduanya peringkat terbaik 2 dan melompati nomor 3. Pilihan lain seperti "first" mengurutkan kembar sesuai urutan baris, berguna saat kriteria seri harus diputuskan oleh urutan data.
import pandas as pd
penjualan = pd.DataFrame(
{
"produk": ["Kopi Gayo", "Teh Melati", "Gula Aren", "Susu UHT", "Keju Edam"],
"unit": [120, 85, 85, 200, 60],
"omzet": [5_400_000, 3_570_000, 4_120_000, 4_800_000, 1_920_000],
}
)
# rank(): peringkat dari kecil ke besar secara bawaan
print(penjualan["omzet"].rank(ascending=False))
# method="min" memberi peringkat terbaik pada nilai kembar
print("\nrank(method='min', ascending=False) pada kolom unit:")
print(penjualan["unit"].rank(method="min", ascending=False))
# tiga omzet teratas dan dua terbawah
print("\ntiga omzet teratas:")
print(penjualan.nlargest(3, "omzet"))
print("\ndua omzet terbawah:")
print(penjualan.nsmallest(2, "omzet"))
# baris dengan omzet tertinggi lewat idxmax
terbaik = penjualan.loc[penjualan["omzet"].idxmax()]
print("\nproduk terlaris:")
print(terbaik)Output yang Dihasilkan:
0 1.0
1 4.0
2 3.0
3 2.0
4 5.0
Name: omzet, dtype: float64
rank(method='min', ascending=False) pada kolom unit:
0 2.0
1 3.0
2 3.0
3 1.0
4 5.0
Name: unit, dtype: float64
tiga omzet teratas:
produk unit omzet
0 Kopi Gayo 120 5400000
3 Susu UHT 200 4800000
2 Gula Aren 85 4120000
dua omzet terbawah:
produk unit omzet
4 Keju Edam 60 1920000
1 Teh Melati 85 3570000
produk terlaris:
produk Kopi Gayo
unit 120
omzet 5400000
Name: 0, dtype: objectMari kita telaah baris-baris kuncinya:
- Baris 10:
rank(ascending=False)menghasilkan Series peringkat omzet; Susu UHT menempati peringkat2.0di bawah Kopi Gayo. - Baris 13-14:
rank(method="min", ascending=False)pada kolomunitmemberi peringkat2.0untuk kedua produk kembar dan tidak melanjutkan ke3.0. - Baris 17-21:
nlargest(3, "omzet")dannsmallest(2, "omzet")mengembalikan tabel utuh dengan seluruh kolomnya, bukan hanya angka omzetnya. - Baris 24-25:
idxmax()dipakai bersama.locuntuk menarik satu baris terbaik, pola yang sudah diajarkan pada chaptermin-max-dan-count.
nlargest() dan nsmallest() #
Keduanya adalah pintas langsung untuk Top-N: nlargest(n, "kolom") sama hasilnya dengan sort_values("kolom", ascending=False).head(n), tetapi lebih cepat pada tabel besar karena pandas memakai algoritme seleksi parsial alih-alih mengurutkan seluruh tabel. Parameter keep mengatur perilaku nilai kembar di tepi pemotongan — "first", "last", atau "all" yang membiarkan jumlah baris melebihi n bila seri terjadi di batas. Keduanya juga menerima daftar kolom untuk pemecah seri, misalnya nlargest(3, ["unit", "omzet"]) yang membandingkan unit dahulu lalu omzet.
Peringkat per Kelompok #
rank() bersambung mulus dengan groupby(): df.groupby("kategori")["omzet"].rank(ascending=False) menghasilkan peringkat omzet di dalam masing-masing kategori, alih-alih peringkat global. Pola ini sering dipakai untuk mencari produk terlaris di tiap toko dalam satu panggilan tanpa perulangan manual. Setelah peringkat tersimpan sebagai kolom, filter Top-N per kelompok menjadi satu baris df[df["peringkat"] <= 3] — kombinasi groupby-transform dan boolean mask yang telah kita pakai sejak section Groupby.
Method-method ini berbagi semangat dengan value_counts() pada chapter berikutnya: keduanya mengubah deret angka mentah menjadi informasi posisi. value_counts() menghitung dari sisi frekuensi, dan chapter tersebut membahasnya lengkap beserta parameter normalize dan bins.
Dokumentasi resmi yang relevan: pandas.Series.rank
untuk daftar lengkap method, pandas.DataFrame.nlargest
untuk parameter columns dan keep, serta pandas.DataFrame.nsmallest
sebagai pasangannya.