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.

python
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:

text
              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  32000

Mari kita telaah kode di atas:

  1. Baris 12: urut_stok = inventori.sort_values(“stok”) menghasilkan tabel dengan index acak, seperti terlihat pada blok output pertama.
  2. 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.
  3. Baris 18: inventori.sort_index(ascending=False) mengurutkan label menurun, dari P-105 kembali ke P-101.
  4. 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:

KebutuhanMethodYang diurutkan
Mengurutkan baris menurut isi kolomsort_values()nilai kolom
Mengurutkan baris menurut labelsort_index()label index
Mengurutkan nama kolomsort_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.