Pandas & NumPy Academy · Pelajaran

Memberi Peringkat pada Nilai

Berikan peringkat pada nilai kolom dengan rank(), pilih metode penanganan nilai yang sama, dan buat bin persentil dengan pd.cut().

Pelajaran 3 dari 413 langkah

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.0

Peringkat 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.0

Metode 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           3

Peringkat 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.0

Pemeringkatan 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          2

pd.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       Senior

pd.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    5

cut() 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 disproportionate

Pemeriksaan 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.

Gratis untuk memulai

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

  1. Mengurutkan Berdasarkan Nilai Kolom
  2. Mengurutkan Berdasarkan Indeks
  3. Memberi Peringkat pada Nilai
  4. Menetapkan dan Mengatur Ulang Indeks
← Kembali ke Pandas & NumPy Academy