Urutan baris pada file hasil ekspor jarang sesuai kebutuhan pembaca: data biasanya terimpor sesuai urutan pencatatan, bukan urutan yang memudahkan analisis. Laporan penjualan umumnya menempatkan produk terlaris di posisi atas, sedangkan daftar stok lebih nyaman dibaca secara abjad. Method sort_values() mengurutkan baris DataFrame berdasarkan nilai satu kolom tanpa mengubah isi barisnya. Pada Chapter ini kita mengurutkan data dari nilai terbesar, dari nilai terkecil, lalu memeriksa apa yang terjadi pada index setelah data terurut.

Mengurutkan Berdasarkan Nilai Kolom #

Data penjualan toko Buah Segar masih kita pakai. Kebutuhan pertama adalah menampilkan produk dari jumlah terjual terbesar, sedangkan kebutuhan kedua menampilkan produk secara abjad. Skrip berikut mengerjakan keduanya dengan satu method yang sama.

python
import pandas as pd

penjualan = pd.DataFrame(
    {
        "produk": ["Kopi Gayo", "Teh Melati", "Gula Aren", "Roti Bakar", "Pisang Goreng"],
        "kasir": ["Budi", "Siti", "Dewi", "Budi", "Dewi"],
        "cabang": ["Bandung", "Jakarta", "Bandung", "Surabaya", "Jakarta"],
        "harga": [18000, 12000, 15000, 20000, 10000],
        "jumlah": [35, 40, 25, 20, 50],
        "stok": [12, 8, 30, 15, 22],
    },
    index=["P001", "P002", "P003", "P004", "P005"],
)

terlaris = penjualan.sort_values(by="jumlah", ascending=False)
print(terlaris)
print()

alfabet = penjualan.sort_values(by="produk")
print(alfabet[["produk", "jumlah"]])
print()

print(list(terlaris.index))
print(list(penjualan.index))

Output yang Dihasilkan:

text
             produk kasir    cabang  harga  jumlah  stok
P005  Pisang Goreng  Dewi   Jakarta  10000      50    22
P002     Teh Melati  Siti   Jakarta  12000      40     8
P001      Kopi Gayo  Budi   Bandung  18000      35    12
P003      Gula Aren  Dewi   Bandung  15000      25    30
P004     Roti Bakar  Budi  Surabaya  20000      20    15

             produk  jumlah
P003      Gula Aren      25
P001      Kopi Gayo      35
P005  Pisang Goreng      50
P004     Roti Bakar      20
P002     Teh Melati      40

['P005', 'P002', 'P001', 'P003', 'P004']
['P001', 'P002', 'P003', 'P004', 'P005']

Mari kita telaah peran setiap baris kode di atas:

  1. Baris 15 (terlaris = penjualan.sort_values(by="jumlah", ascending=False)): argumen by menyebut kolom acuan, dan ascending=False membalik arah urutan menjadi dari nilai terbesar.
  2. Baris 16-17: output pertama menempatkan Pisang Goreng (50) di baris atas, disusul Teh Melati (40), sampai Roti Bakar (20) di posisi terakhir.
  3. Baris 19 (alfabet = penjualan.sort_values(by="produk")): tanpa argumen ascending, pandas memakai default True, yaitu urutan menaik.
  4. Baris 20: kolom produk bertipe string, sehingga pengurutan mengikuti urutan abjad; output kedua menampilkan Gula Aren lebih dulu.
  5. Baris 23-24: index hasil sort menunjukkan urutan baru, sedangkan index penjualan asli tetap P001 sampai P005.

Angka pada kolom acuan dibandingkan sesuai nilainya, bukan sesuai posisi barisnya. Dua baris dengan nilai acuan yang sama tidak dijamin mempertahankan urutan relatifnya; bila urutan itu penting, gunakan beberapa kolom acuan sekaligus sebagaimana dibahas pada Chapter berikutnya. Untuk kolom bertipe datetime, perbandingan berjalan kronologis sehingga data transaksi mudah diurutkan dari yang terbaru.

Arah Pengurutan dengan ascending #

Argumen ascending mengatur arah pengurutan: True untuk menaik dan False untuk menurun. Arah yang sama berlaku untuk semua tipe data yang dapat dibandingkan, termasuk string (urutan abjad) dan datetime (urutan waktu). Nilai NaN diperlakukan khusus: secara default pandas menaruhnya di akhir hasil, dan argumen na_position="first" memindahkannya ke awal bila dibutuhkan. Halaman Essential basic functionality merangkum perilaku pengurutan ini di antara operasi dasar lainnya.

Index Mengikuti Barisnya #

Perhatikan output terakhir: index terlaris berbunyi P005, P002, P001, P003, P004. Label index menempel pada barisnya dan ikut pindah saat pengurutan, sehingga identitas setiap baris tetap dapat dilacak. Pandas tidak pernah menomori ulang index secara otomatis setelah sort. Apabila kita membutuhkan nomor urut baru 0 sampai 4, method reset_index() yang dibahas pada Chapter reset_index() bertugas melakukannya.

Pengurutan satu kolom sudah menjawab banyak kebutuhan laporan, tetapi kebutuhan nyata sering lebih rinci: urutkan per cabang, lalu di dalamnya urutkan per jumlah terjual. Kombinasi beberapa kolom acuan dengan arah yang berbeda-beda kita praktikkan pada Chapter berikutnya, Mengurutkan Berdasarkan Beberapa Kolom.