0Pricing
Pandas & NumPy Academy · Pelajaran

Mengurutkan Berdasarkan Nilai Kolom

Urutkan DataFrame berdasarkan satu atau beberapa kolom dengan sort_values(), atur urutan menaik atau menurun, dan tangani penempatan NaN.

Mengurutkan Berdasarkan Nilai Kolom adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.

Mengapa Pengurutan Penting

Mengurutkan DataFrame penting untuk penyajian (laporan teratas-N, papan peringkat), ketepatan (operasi deret waktu memerlukan urutan kronologis), dan kinerja (pencarian biner pada indeks terurut adalah O(log n), dibandingkan O(n)). Metode sort_values() milik Pandas adalah alat utama untuk mengurutkan berdasarkan isi kolom, dan metode ini mengembalikan DataFrame baru tanpa mengubah yang asli.

import pandas as pd

df = pd.DataFrame({
    'name': ['Dave', 'Alice', 'Carol', 'Bob'],
    'score': [75, 92, 88, 65]
})

# Sort by score descending (highest first)
ranked = df.sort_values('score', ascending=False)
print(ranked)
#     name  score
# 1  Alice     92
# 2  Carol     88
# 0   Dave     75
# 3    Bob     65

sort_values() — Penggunaan Dasar

DataFrame.sort_values(by) mengurutkan baris berdasarkan nilai pada kolom yang ditentukan. Argumen by menerima satu nama kolom (string) atau daftar nama kolom untuk pengurutan dengan beberapa kunci. Secara default, pengurutan dilakukan secara menaik (terkecil lebih dahulu). Gunakan ascending=False untuk urutan menurun.

import pandas as pd

df = pd.DataFrame({
    'product': ['B', 'A', 'C', 'A', 'B'],
    'price': [20, 10, 30, 15, 25]
})

# Ascending by price (default)
print(df.sort_values('price'))
#   product  price
# 1       A     10
# 3       A     15
# 0       B     20
# 4       B     25
# 2       C     30

Mengurutkan Berdasarkan Beberapa Kolom

Memberikan daftar nama kolom kepada sort_values(by=) akan mengurutkan berdasarkan kolom pertama, kemudian menyelesaikan nilai yang sama menggunakan kolom kedua, dan seterusnya. Parameter ascending juga dapat berupa daftar boolean yang urutannya sesuai dengan kolom, sehingga setiap kunci dapat memiliki arah pengurutan yang berbeda.

import pandas as pd

df = pd.DataFrame({
    'dept': ['HR', 'Eng', 'HR', 'Eng', 'Sales'],
    'salary': [50000, 90000, 60000, 80000, 70000],
    'name': ['Alice', 'Bob', 'Carol', 'Dave', 'Eve']
})

# Sort by dept A-Z, then by salary descending within each dept
sorted_df = df.sort_values(
    by=['dept', 'salary'],
    ascending=[True, False]
)
print(sorted_df)
#     dept  salary   name
# 1    Eng   90000    Bob
# 3    Eng   80000   Dave
# 2     HR   60000  Carol
# 0     HR   50000  Alice
# 4  Sales   70000    Eve

Penempatan NaN dengan na_position

Secara default, nilai NaN diurutkan ke bagian akhir hasil, baik dalam urutan menaik maupun menurun. Gunakan parameter na_position untuk mengaturnya: 'last' (default) atau 'first'. Menentukan posisi NaN penting dalam tabel berperingkat — nilai yang hilang mungkin berarti 'unknown' dan harus dipisahkan dengan jelas dari entri valid yang memiliki peringkat.

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Carol', 'Dave'],
    'score': [92, np.nan, 88, np.nan]
})

# NaN last (default)
print(df.sort_values('score', ascending=False, na_position='last'))
#     name  score
# 0  Alice   92.0
# 2  Carol   88.0
# 1    Bob    NaN
# 3   Dave    NaN

# NaN first
print(df.sort_values('score', na_position='first').head(2))

Pengurutan Stabil dan Parameter kind=

Pandas secara default menggunakan pengurutan stabil (mergesort, yaitu O(n log n)) — ketika dua baris memiliki nilai yang sama pada kunci pengurutan, urutan relatif aslinya dipertahankan. Stabilitas ini penting ketika Anda mengurutkan berdasarkan kunci utama terlebih dahulu, lalu kunci sekunder: urutan utama tetap dipertahankan di antara nilai yang sama pada pengurutan sekunder. Anda dapat mengubah algoritmanya dengan kind='quicksort' (lebih cepat tetapi tidak stabil) atau kind='heapsort'.

import pandas as pd

df = pd.DataFrame({
    'group': ['A', 'B', 'A', 'B'],
    'value': [10, 10, 20, 20],
    'original_row': [0, 1, 2, 3]
})

# Stable sort: equal values keep original relative order
result = df.sort_values('value', kind='mergesort')
print(result)
#    group  value  original_row
# 0      A     10             0
# 1      B     10             1   <- row 0 before row 1 (stable)
# 2      A     20             2
# 3      B     20             3

inplace=True vs Penetapan Ulang

Seperti kebanyakan metode Pandas, sort_values() secara default mengembalikan DataFrame baru. Memberikan inplace=True akan mengubah DataFrame secara langsung dan mengembalikan None. Penggunaan inplace umumnya tidak disarankan dalam Pandas modern karena membuat kode lebih sulit dirangkai dan di-debug — lebih mudah jika Anda selalu menetapkan ulang: df = df.sort_values('col').

import pandas as pd

df = pd.DataFrame({'x': [3, 1, 4, 1, 5]})

# Preferred: reassign
df = df.sort_values('x')
print(df['x'].tolist())  # [1, 1, 3, 4, 5]

# Alternative: inplace (not recommended for pipelines)
df2 = pd.DataFrame({'x': [3, 1, 4]})
df2.sort_values('x', inplace=True)
print(df2['x'].tolist())  # [1, 3, 4]

Mengatur Ulang Indeks Setelah Pengurutan

Setelah pengurutan, indeks baris mencerminkan posisi asli. Dalam tabel yang diurutkan menurun, baris 0 mungkin sekarang memiliki indeks 4. Panggil .reset_index(drop=True) untuk menetapkan ulang indeks berurutan mulai dari 0. Hal ini penting sebelum menggunakan .iloc[0] untuk memperoleh baris dengan peringkat pertama secara andal, atau sebelum mengekspor ke file yang celah indeksnya dapat terlihat membingungkan.

import pandas as pd

df = pd.DataFrame({'score': [70, 90, 80]})
sorted_df = df.sort_values('score', ascending=False)
print(sorted_df)
#    score
# 1     90
# 2     80
# 0     70

# Clean sequential index
reset_df = sorted_df.reset_index(drop=True)
print(reset_df)
#    score
# 0     90
# 1     80
# 2     70

Mendapatkan N Teratas dengan nlargest() dan nsmallest()

Untuk memilih N baris teratas atau terbawah berdasarkan nilai kolom, df.nlargest(n, 'col') dan df.nsmallest(n, 'col') lebih efisien daripada mengurutkan seluruh DataFrame lalu mengambil irisan. Keduanya menggunakan pengurutan sebagian (pemilihan heap) yang memiliki kompleksitas O(n log k), bukan O(n log n), sehingga bermanfaat untuk DataFrames berukuran besar.

import pandas as pd

df = pd.DataFrame({
    'product': ['A', 'B', 'C', 'D', 'E'],
    'revenue': [5000, 12000, 8000, 3000, 15000]
})

# Top 3 by revenue
top3 = df.nlargest(3, 'revenue')
print(top3)
#   product  revenue
# 4       E    15000
# 1       B    12000
# 2       C     8000

# Bottom 2 by revenue
bottom2 = df.nsmallest(2, 'revenue')
print(bottom2)

Mengurutkan Kolom Kategorikal Berdasarkan Urutan Kategori

Saat mengurutkan kolom yang berisi dtype Categorical berurutan, sort_values() mengikuti urutan kategori, bukan urutan alfabetis. Hal ini penting untuk mengurutkan tingkat prioritas, tingkat keparahan, atau label ukuran dengan benar — 'Small' harus muncul sebelum 'Medium', lalu 'Large', bukan dalam urutan alfabetis yang menempatkan 'Large' terlebih dahulu.

import pandas as pd

df = pd.DataFrame({
    'size': pd.Categorical(
        ['Large', 'Small', 'Medium', 'Small', 'Large'],
        categories=['Small', 'Medium', 'Large'],
        ordered=True
    ),
    'count': [10, 5, 8, 3, 7]
})

print(df.sort_values('size'))
#      size  count
# 1   Small      5
# 3   Small      3
# 2  Medium      8
# 0   Large     10
# 4   Large      7

Merangkai Pengurutan dengan Operasi Lain

Karena sort_values() mengembalikan DataFrame, metode ini dapat diintegrasikan secara alami ke dalam rangkaian metode. Pola yang umum adalah: memfilter baris → melakukan agregasi → mengurutkan → menampilkan N teratas. Perangkaian membuat alur transformasi tetap linear dan mudah dibaca.

import pandas as pd

df = pd.DataFrame({
    'dept': ['Eng', 'HR', 'Eng', 'Sales', 'HR', 'Eng'],
    'salary': [90000, 50000, 120000, 70000, 55000, 80000]
})

result = (
    df
    .groupby('dept')['salary'].mean()
    .reset_index()
    .sort_values('salary', ascending=False)
    .head(2)
)
print(result)
#    dept    salary
# 0   Eng  96666.67
# 2  Sales  70000.00

Praktik: Laporan 5 Produk Teratas

Berikut contoh praktis menyeluruh untuk membuat laporan 5 produk teratas berdasarkan pendapatan: memuat data, menghitung total pendapatan per produk, mengurutkan secara menurun, mengambil 5 teratas, mengatur ulang indeks untuk menghasilkan nomor peringkat yang rapi, dan menambahkan kolom peringkat untuk ditampilkan.

import pandas as pd

orders = pd.DataFrame({
    'product': ['A', 'B', 'A', 'C', 'B', 'D', 'E', 'A', 'C', 'E'],
    'revenue': [100, 200, 150, 80, 300, 60, 400, 120, 90, 350]
})

top5 = (
    orders
    .groupby('product')['revenue'].sum()
    .reset_index()
    .sort_values('revenue', ascending=False)
    .head(5)
    .reset_index(drop=True)
)
top5.index = top5.index + 1  # rank from 1
top5.index.name = 'rank'
print(top5)

Pemeriksaan Singkat

Uji pemahaman Anda tentang pengurutan DataFrames berdasarkan nilai kolom.

Ringkasan Pelajaran

Dalam pelajaran ini, Anda mempelajari bahwa: sort_values(by=) mengurutkan berdasarkan satu atau beberapa kolom, ascending= dapat berupa daftar untuk menentukan arah yang berbeda bagi setiap kunci, na_position='last' mengatur posisi NaN, dan nlargest()/nsmallest() mengekstrak N baris teratas/terbawah secara efisien tanpa mengurutkan seluruh DataFrame. Selalu gunakan reset_index() setelah pengurutan agar keluaran berurutan tetap rapi. Selanjutnya, kita akan mengurutkan berdasarkan indeks DataFrame.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengurutkan Berdasarkan Nilai Kolom” gratis?

Ya — teks lengkap “Mengurutkan Berdasarkan Nilai Kolom” 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 “Mengurutkan Berdasarkan Nilai Kolom”?

Urutkan DataFrame berdasarkan satu atau beberapa kolom dengan sort_values(), atur urutan menaik atau menurun, dan tangani penempatan NaN. 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 1 dari 4.

Berapa lama pelajaran “Mengurutkan Berdasarkan Nilai Kolom” 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