sort_values() mengurutkan baris berdasarkan nilai kolom, dan label index ikut berpindah mengikuti barisnya masing-masing. Akibatnya tabel hasil pengurutan sering memiliki urutan index yang tampak acak. Bila index berisi data yang bermakna, misalnya kode produk atau tanggal, kita kadang ingin tabel kembali tersusun rapi berdasarkan label tersebut. Di sinilah sort_index() berperan: method ini mengurutkan baris berdasarkan label index, bukan berdasarkan isi kolom.
Urutan Index Setelah sort_values() #
Kita masih memakai data inventori lima produk dari chapter sebelumnya. Ketika tabel diurutkan berdasarkan kolom stok, barisnya pindah mengikuti nilai stok dan label ikut bersama barisnya. Urutan P-103, P-101, P-102, P-105, P-104 milik tabel awal berubah menjadi P-105, P-101, P-104, P-103, P-102. Labelnya tetap lengkap, tetapi tidak lagi tersusun menaik.
Mengurutkan Baris Berdasarkan Label Index #
Script berikut mengurutkan inventori berdasarkan stok terlebih dahulu, lalu menata ulang hasilnya dengan sort_index(). Setelah itu kita urutkan juga tabel asal secara menurun berdasarkan index untuk melihat arah sebaliknya.
import pandas as pd
inventori = pd.DataFrame(
{
"produk": ["Kopi Gayo", "Teh Melati", "Gula Aren", "Sirup Jahe", "Madu Sumatera"],
"stok": [42, 15, 42, 8, 27],
"harga": [85000, 32000, 88000, 21000, 95000],
},
index=["P-103", "P-101", "P-102", "P-105", "P-104"],
)
urut_stok = inventori.sort_values("stok")
print(urut_stok)
print()
urut_index = urut_stok.sort_index()
print(urut_index)
print()
urut_menurun = inventori.sort_index(ascending=False)
print(urut_menurun)Output yang Dihasilkan:
produk stok harga
P-105 Sirup Jahe 8 21000
P-101 Teh Melati 15 32000
P-104 Madu Sumatera 27 95000
P-103 Kopi Gayo 42 85000
P-102 Gula Aren 42 88000
produk stok harga
P-101 Teh Melati 15 32000
P-102 Gula Aren 42 88000
P-103 Kopi Gayo 42 85000
P-104 Madu Sumatera 27 95000
P-105 Sirup Jahe 8 21000
produk stok harga
P-105 Sirup Jahe 8 21000
P-104 Madu Sumatera 27 95000
P-103 Kopi Gayo 42 85000
P-102 Gula Aren 42 88000
P-101 Teh Melati 15 32000Mari kita telaah kode di atas:
- Baris 12: urut_stok = inventori.sort_values(“stok”) menghasilkan tabel dengan index acak, seperti terlihat pada blok output pertama.
- Baris 15: urut_stok.sort_index() mengurutkan label menaik; hasilnya P-101 sampai P-105 tersusun rapi dan seluruh isi baris ikut pindah utuh bersama labelnya.
- Baris 18: inventori.sort_index(ascending=False) mengurutkan label menurun, dari P-105 kembali ke P-101.
- Konsekuensi: ketiga panggilan mengembalikan DataFrame baru; inventori tetap dalam urutan asalnya.
sort_index() dan sort_values() Berdampingan #
Kedua method saling melengkapi, dan pilihannya ditentukan oleh apa yang ingin kita urutkan:
| Kebutuhan | Method | Yang diurutkan |
|---|---|---|
| Mengurutkan baris menurut isi kolom | sort_values() | nilai kolom |
| Mengurutkan baris menurut label | sort_index() | label index |
| Mengurutkan nama kolom | sort_index(axis=1) | nama kolom |
Parameter axis membuat sort_index() juga bekerja pada kolom. Dengan axis=1, kolom produk, stok, dan harga tersusun ulang secara alfabetis menjadi harga, produk, dan stok. Untuk index berisi angka atau tanggal, sort_index() bekerja dengan cara yang sama: label diurutkan dari nilai terkecil ke terbesar, atau sebaliknya bila ascending=False. Halaman Basics pada user guide merangkum kedua method sebagai bagian dari operasi dasar DataFrame.
Kapan pun index dipilih sebagai kunci, keunggulan sort_index() adalah hasilnya tidak bergantung pada isi kolom apa pun. Tabel dengan ribuan baris tetap tersusun hanya dari labelnya, dan urutan hasilnya sama setiap kali script dijalankan. Karena contoh kita tidak memakai label duplikat, pasangan label dan barisnya selalu dapat dibaca sebagai identitas baris.
Index yang tersusun rapi memudahkan kita membaca tabel dan membantu operasi berbasis label bekerja lebih terprediksi. Persoalan berikutnya muncul ketika jumlah baris berubah karena filter: label index menjadi tidak berurutan. Chapter berikutnya membahas reset_index() untuk menomori ulang baris sekaligus menyimpan label lama sebagai kolom.