Memberi Peringkat pada Nilai
Berikan peringkat pada nilai kolom dengan rank(), pilih metode penanganan nilai yang sama, dan buat bin persentil dengan pd.cut().
Memberi Peringkat pada Nilai adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Apa Itu Pemeringkatan?
Pemeringkatan memberikan setiap nilai dalam sebuah Series suatu posisi berdasarkan besar relatifnya — peringkat 1 untuk nilai terkecil, peringkat n untuk nilai terbesar (atau sebaliknya). Berbeda dari pengurutan (yang mengubah urutan baris), rank() menambahkan kolom baru berisi posisi ordinal di samping data asli. Pemeringkatan digunakan dalam papan peringkat, penghitungan persentil, dan beberapa pengujian statistik yang memerlukan posisi ordinal, bukan nilai absolut.
import pandas as pd
df = pd.DataFrame({
'player': ['Alice', 'Bob', 'Carol', 'Dave', 'Eve'],
'score': [88, 72, 95, 72, 85]
})
df['rank'] = df['score'].rank()
print(df)
# player score rank
# 0 Alice 88 4.0
# 1 Bob 72 1.5 <- tied with Dave
# 2 Carol 95 5.0
# 3 Dave 72 1.5 <- tied with Bob
# 4 Eve 85 3.0Peringkat Menaik vs Menurun
Secara bawaan, rank() memberikan peringkat 1 kepada nilai terkecil (menaik). Untuk memberikan peringkat 1 kepada nilai terbesar (misalnya, juara pertama dalam kompetisi), teruskan ascending=False. Hal ini mengikuti konvensi “peringkat pertama = skor tertinggi” yang digunakan dalam olahraga, papan peringkat, dan pemeringkatan penjualan.
import pandas as pd
df = pd.DataFrame({'score': [70, 95, 85, 60, 90]})
# Rank 1 = highest score
df['competition_rank'] = df['score'].rank(ascending=False)
print(df)
# score competition_rank
# 0 70 4.0
# 1 95 1.0
# 2 85 3.0
# 3 60 5.0
# 4 90 2.0Metode Pemecahan Seri
Ketika beberapa baris memiliki nilai yang sama (seri), parameter method menentukan cara pemberian peringkat. Pilihannya adalah: 'average' (bawaan — baris yang seri berbagi peringkat rata-rata), 'min' (semua baris yang seri mendapat peringkat terendah), 'max' (semuanya mendapat peringkat tertinggi), 'first' (baris yang muncul lebih dahulu mendapat peringkat lebih rendah), dan 'dense' (tidak ada celah dalam angka peringkat setelah seri).
import pandas as pd
s = pd.Series([10, 20, 20, 30])
print('average:', s.rank(method='average').tolist()) # [1.0, 2.5, 2.5, 4.0]
print('min: ', s.rank(method='min').tolist()) # [1.0, 2.0, 2.0, 4.0]
print('max: ', s.rank(method='max').tolist()) # [1.0, 3.0, 3.0, 4.0]
print('first: ', s.rank(method='first').tolist()) # [1.0, 2.0, 3.0, 4.0]
print('dense: ', s.rank(method='dense').tolist()) # [1.0, 2.0, 2.0, 3.0]Peringkat Padat: Tanpa Celah Setelah Seri
Metode 'dense' sangat berguna ketika Anda menginginkan peringkat tanpa celah. Dengan 'min', dua entri yang seri di peringkat ke-2 membuat peringkat berikutnya menjadi 4 (melewati 3). Dengan 'dense', peringkat berikutnya selalu 3 sehingga urutannya tetap berkelanjutan. Peringkat padat merupakan standar dalam fungsi jendela SQL DENSE_RANK() dan umum digunakan dalam papan peringkat.
import pandas as pd
df = pd.DataFrame({
'name': ['A', 'B', 'C', 'D', 'E'],
'score': [100, 80, 80, 60, 60]
})
df['dense_rank'] = df['score'].rank(method='dense', ascending=False).astype(int)
print(df)
# name score dense_rank
# 0 A 100 1
# 1 B 80 2
# 2 C 80 2 <- same score, same rank
# 3 D 60 3 <- next rank is 3, not 4
# 4 E 60 3Peringkat Persentil dengan pct=True
Menyetel pct=True dalam rank() menormalisasi peringkat ke rentang [0, 1] sehingga Anda memperoleh peringkat persentil. Nilai dengan peringkat persentil 0.8 berarti nilainya lebih tinggi daripada 80% nilai dalam kolom tersebut. Ini digunakan dalam keuangan (kinerja persentil), penilaian (persentil skor), dan pendeteksian pencilan.
import pandas as pd
df = pd.DataFrame({'score': [50, 70, 80, 90, 100]})
df['percentile'] = df['score'].rank(pct=True)
print(df)
# score percentile
# 0 50 0.2
# 1 70 0.4
# 2 80 0.6
# 3 90 0.8
# 4 100 1.0Pemeringkatan Dalam Kelompok
Untuk menghitung peringkat dalam setiap kelompok secara terpisah (misalnya, peringkat gaji setiap departemen), gabungkan groupby() dengan rank(). Gunakan groupby().rank(), yang menerapkan fungsi peringkat pada setiap kelompok dan menghasilkan Series yang sejajar dengan indeks DataFrame asli — sangat cocok untuk menambahkan kolom “peringkat dalam kelompok”.
import pandas as pd
df = pd.DataFrame({
'dept': ['Eng', 'Eng', 'HR', 'HR', 'Eng'],
'name': ['Alice', 'Bob', 'Carol', 'Dave', 'Eve'],
'salary': [90000, 70000, 55000, 65000, 80000]
})
df['dept_rank'] = df.groupby('dept')['salary'].rank(
method='dense', ascending=False
).astype(int)
print(df.sort_values(['dept', 'dept_rank']))
# dept name salary dept_rank
# 0 Eng Alice 90000 1
# 4 Eng Eve 80000 2
# 1 Eng Bob 70000 3
# 3 HR Dave 65000 1
# 2 HR Carol 55000 2pd.cut() untuk Interval Lebar Sama
pd.cut(series, bins) membagi kolom numerik kontinu menjadi interval berlebar sama (bin) dan menetapkan setiap nilai ke bin-nya. Cara ini mengubah variabel kontinu menjadi variabel kategorikal, yang berguna untuk histogram, kelompok usia, rentang pendapatan, atau tugas diskretisasi apa pun. Hasilnya adalah Series Kategorikal dengan label interval.
import pandas as pd
df = pd.DataFrame({'age': [5, 15, 25, 35, 45, 55, 65, 75]})
df['age_group'] = pd.cut(df['age'], bins=[0, 18, 35, 60, 100],
labels=['Child', 'Young Adult', 'Middle Age', 'Senior'])
print(df)
# age age_group
# 0 5 Child
# 1 15 Child
# 2 25 Young Adult
# 3 35 Young Adult
# 4 45 Middle Age
# 5 55 Middle Age
# 6 65 Senior
# 7 75 Seniorpd.qcut() untuk Interval Frekuensi Sama
pd.qcut(series, q) membagi nilai menjadi bin berbasis kuantil, dengan setiap bin berisi kira-kira jumlah pengamatan yang sama. Berbeda dari pd.cut() (lebar sama), pd.qcut() menghasilkan kelompok berukuran sama — berguna untuk segmentasi berbasis persentil seperti skor desil, pembagian kuintil, atau pengelompokan kuartil.
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame({'score': np.random.randint(40, 100, 20)})
# Split into 4 equal-frequency quartiles
df['quartile'] = pd.qcut(df['score'], q=4, labels=['Q1', 'Q2', 'Q3', 'Q4'])
print(df['quartile'].value_counts().sort_index())
# Q1 5
# Q2 5
# Q3 5
# Q4 5cut() vs qcut() — Perbedaan Utama
Gunakan pd.cut() ketika bin Anda memiliki makna alami dalam domain (misalnya, rentang usia 0–18, 18–35, 35–60) — lebar bin memiliki makna secara semantik. Gunakan pd.qcut() ketika Anda menginginkan ukuran kelompok yang sama tanpa memedulikan letak batasnya — misalnya, membagi pelanggan ke dalam kuartil teratas dan terbawah. Distribusi yang menceng akan menghasilkan kelompok yang sangat tidak sama dengan cut(), tetapi kelompok yang sama dengan qcut().
import pandas as pd
import numpy as np
np.random.seed(0)
# Skewed distribution: most values near 0
skewed = pd.Series(np.random.exponential(scale=5, size=100).round())
# cut with equal width: many empty or tiny upper bins
cut_counts = pd.cut(skewed, bins=4).value_counts().sort_index()
print('cut():', cut_counts.values)
# qcut with equal frequency: always 25 per group
qcut_counts = pd.qcut(skewed, q=4).value_counts().sort_index()
print('qcut():', qcut_counts.values)Menambahkan Nomor Peringkat sebagai Kolom
Pola yang rapi untuk menghasilkan tabel keluaran berperingkat adalah: urutkan secara menurun, atur ulang indeks ke indeks berbasis 0, geser sebesar 1 agar peringkat berbasis 1 mudah dibaca manusia, lalu tampilkan di samping data asli. Hasilnya adalah papan peringkat yang siap ditampilkan, tanpa celah dan dengan nomor peringkat yang rapi.
import pandas as pd
df = pd.DataFrame({
'team': ['Falcons', 'Eagles', 'Hawks', 'Owls'],
'wins': [12, 9, 12, 7]
})
leaderboard = (
df
.sort_values('wins', ascending=False)
.reset_index(drop=True)
)
leaderboard.index = leaderboard.index + 1
leaderboard.index.name = 'place'
print(leaderboard)Peringkat sebagai Fitur untuk Pembelajaran Mesin
Fitur yang ditransformasikan menjadi peringkat berguna dalam pembelajaran mesin karena tahan terhadap pencilan — nilai yang sangat besar atau sangat kecil mendapat peringkat mendekati ujung, bukan membuat distribusi fitur menjadi miring. Transformasi peringkat terkadang digunakan sebagai langkah prapemrosesan sebelum model berbasis pohon atau ketika skala numerik tidak bermakna, tetapi urutan relatifnya bermakna.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'income': [30000, 50000, 70000, 1_000_000] # outlier at 1M
})
# Add rank as a feature
df['income_rank'] = df['income'].rank(pct=True)
print(df)
# income income_rank
# 0 30000 0.25
# 1 50000 0.50
# 2 70000 0.75
# 3 1000000 1.00
# The outlier has rank 1.0 — extreme but not disproportionatePemeriksaan Singkat
Uji pemahaman Anda tentang pemeringkatan nilai di Pandas.
Ringkasan Pelajaran
Dalam pelajaran ini, Anda mempelajari bahwa rank() memberikan posisi ordinal kepada nilai, method='dense' menghindari celah setelah nilai seri, pct=True menghasilkan peringkat persentil dalam [0,1], dan groupby().rank() menghitung peringkat dalam kelompok. Gunakan pd.cut() untuk bin berlebar sama dan pd.qcut() untuk bin berfrekuensi sama saat mendiskretisasi variabel kontinu. Selanjutnya, kita akan menetapkan dan mengatur ulang indeks DataFrame.
Belajar Python dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Memberi Peringkat pada Nilai” gratis?
Ya — teks lengkap “Memberi Peringkat pada Nilai” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Memberi Peringkat pada Nilai”?
Berikan peringkat pada nilai kolom dengan rank(), pilih metode penanganan nilai yang sama, dan buat bin persentil dengan pd.cut(). Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?
Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Memberi Peringkat pada Nilai” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?
Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengurutkan Berdasarkan Nilai Kolom
- Mengurutkan Berdasarkan Indeks
- Memberi Peringkat pada Nilai
- Menetapkan dan Mengatur Ulang Indeks