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.
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:
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:
- Baris 15 (
terlaris = penjualan.sort_values(by="jumlah", ascending=False)): argumenbymenyebut kolom acuan, danascending=Falsemembalik arah urutan menjadi dari nilai terbesar. - Baris 16-17: output pertama menempatkan
Pisang Goreng(50) di baris atas, disusulTeh Melati(40), sampaiRoti Bakar(20) di posisi terakhir. - Baris 19 (
alfabet = penjualan.sort_values(by="produk")): tanpa argumenascending, pandas memakai defaultTrue, yaitu urutan menaik. - Baris 20: kolom
produkbertipe string, sehingga pengurutan mengikuti urutan abjad; output kedua menampilkanGula Arenlebih dulu. - Baris 23-24: index hasil sort menunjukkan urutan baru, sedangkan index
penjualanasli tetapP001sampaiP005.
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.