Pandas MultiIndex: Bekerja dengan Index Bertingkat (2026)
TL;DR
MultiIndex di pandas adalah index yang punya lebih dari satu level, misalnya kota di level pertama dan bulan di level kedua. Struktur ini muncul otomatis setelah groupby dengan beberapa kolom. Buat ambil datanya pakai loc buat urut dari level atas, atau xs buat iris satu level tertentu. Ratain lagi jadi kolom biasa pakai reset_index.
MultiIndex di pandas adalah index yang punya lebih dari satu level, misalnya kota di level pertama dan bulan di level kedua.
Jadi satu baris dikenali dari kombinasi beberapa label sekaligus, bukan cuma satu. Struktur ini sering muncul sendiri setelah kamu groupby dua kolom.
Habis baca ini kamu bisa bikin index bertingkat, ngambil datanya pakai loc dan xs, lalu ratain lagi jadi kolom biasa buat diekspor.
Apa itu MultiIndex di pandas?
MultiIndex adalah index dengan lebih dari satu level. Tiap baris dikenali oleh kombinasi label, misalnya pasangan kota dan bulan. Ini bikin data yang dikelompokkan bertingkat jadi rapi dan gampang diiris per level. MultiIndex biasa muncul otomatis dari groupby dua kolom atau lebih.
Kalau kamu belum akrab sama struktur tabel pandas, cek dulu glossary DataFrame biar dasarnya kepegang.
import pandas as pd
df = pd.DataFrame({
'kota': ['Bandung', 'Bandung', 'Medan', 'Medan'],
'bulan': ['Jan', 'Feb', 'Jan', 'Feb'],
'total': [100, 120, 90, 110]
})
bertingkat = df.set_index(['kota', 'bulan'])
print(bertingkat)
Sekarang tiap baris diindex pasangan kota dan bulan. Kolom total tinggal jadi satu-satunya data, sisanya pindah jadi identitas baris.
Gimana cara bikin MultiIndex?
Ada dua cara umum. Pertama, set_index dengan list kolom, seperti contoh di atas. Kedua, biarin groupby yang bikin. Begitu kamu groupby dua kolom, hasilnya otomatis punya MultiIndex. Cara kedua ini yang paling sering ketemu di kerjaan nyata.
rekap = df.groupby(['kota', 'bulan'])['total'].sum()
print(rekap)
print(rekap.index) # MultiIndex
Hasil groupby ini punya index kota dan bulan sekaligus. Buat ngubah bentuknya jadi tabel silang, lanjut ke stack dan unstack di pandas.
Gimana cara ambil data dari MultiIndex?
Buat ngambil urut dari level atas, pakai loc dengan tuple. Buat iris satu level tertentu tanpa peduli level lain, pakai xs. loc cocok kalau kamu tau nilai level atasnya. xs cocok kalau kamu cuma mau nyaring berdasarkan level bawah.
# Ambil kombinasi Bandung + Jan
bertingkat.loc[('Bandung', 'Jan')]
# Ambil semua kota di bulan Jan aja
bertingkat.xs('Jan', level='bulan')
Perhatiin label kombinasi ditulis dalam kurung sebagai tuple: ('Bandung', 'Jan'). Kalau ditulis dipisah koma tanpa kurung, pandas salah ngartiin dan bisa error.
Gimana cara ratain MultiIndex jadi kolom biasa?
Pakai reset_index. Fungsi ini mindahin semua level index jadi kolom biasa, dan DataFrame-nya balik rata dengan index angka default. Kalau cuma mau mindahin satu level, kasih argumen level. Ini berguna sebelum ekspor ke Excel atau CSV.
# Semua level jadi kolom
rekap.reset_index()
# Cuma level bulan yang jadi kolom
rekap.reset_index(level='bulan')
Format rata lebih gampang dibaca di spreadsheet dibanding index bertingkat. Jadi biasakan reset_index dulu sebelum to_excel atau to_csv.
Contoh kasus: rekap penjualan wilayah toko_berkah
Toko_berkah punya 4 cabang di kota berbeda, masing-masing data 12 bulan. Total 48 baris kombinasi kota dan bulan. Pemiliknya mau navigasi cepat: kadang lihat satu kota, kadang bandingin satu bulan di semua kota.
Dari dataset ngulikdata, dengan MultiIndex kota dan bulan, ngambil data satu kota cukup satu baris loc, dan bandingin satu bulan di semua kota cukup satu xs. Tanpa MultiIndex, dua operasi ini butuh filter kondisi yang lebih panjang dan gampang salah.
rekap = df.groupby(['kota', 'bulan'])['total'].sum()
# Lihat performa satu cabang
rekap.loc['Bandung']
# Bandingin semua cabang di Desember
rekap.xs('Des', level='bulan').sort_values(ascending=False)
Baris terakhir langsung ngasih ranking cabang di bulan Desember, dari yang paling ramai. Satu baris, tanpa tabel bantu.
Kesalahan umum MultiIndex
Lupa sort_index sebelum slicing. Pandas sering minta index terurut buat ngambil sebagian, dan kasih UnsortedIndexError kalau belum. Jalankan sort_index() dulu setelah bikin MultiIndex.
Nulis label kombinasi tanpa tuple. Buat ngambil dua level, bungkus dalam kurung seperti loc[('Bandung', 'Jan')]. Tanpa kurung, pandas ngira kamu ngambil dua baris terpisah.
Nyimpen MultiIndex ke Excel tanpa reset_index. Index bertingkat sering keliatan berantakan di spreadsheet, dengan sel gabungan yang susah difilter. Ratain dulu pakai reset_index biar rapi.
FAQ
Apa itu MultiIndex di pandas?
MultiIndex adalah index dengan lebih dari satu level, jadi satu baris dikenali dari kombinasi beberapa label seperti kota dan bulan. Struktur ini sering muncul otomatis setelah groupby dua kolom atau lebih.
Gimana cara ambil data dari MultiIndex?
Pakai loc dengan tuple buat ngambil urut dari level atas, contohnya df.loc[('Bandung', 'Jan')]. Pakai xs buat iris satu level tertentu, contohnya df.xs('Jan', level='bulan').
Gimana ubah MultiIndex jadi kolom biasa?
Pakai reset_index. Fungsi ini mindahin semua level index jadi kolom biasa dan balikin index angka default. Kasih argumen level kalau cuma mau mindahin satu level. Berguna sebelum ekspor ke Excel atau CSV.
Penutup
MultiIndex bikin data bertingkat gampang dinavigasi. Ingat tiga hal: pakai loc dengan tuple buat kombinasi level, xs buat iris satu level, dan reset_index buat ratain sebelum ekspor. Jangan lupa sort_index dulu biar slicing nggak error.
Mau latihan olah data pakai pandas asli? Kulik di Ngulik Data, materi Python buat analis dari nol.
Lanjut baca: stack dan unstack di pandas buat reshape MultiIndex, dan dokumentasi resmi MultiIndex pandas.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
NumPy reshape: Ubah Bentuk Array (2026)
Fungsi reshape di NumPy ngatur ulang bentuk array tanpa ngubah datanya. Ini cara pakainya, arti angka -1, dan cara ngeflat array.
NumPy Array: Dasar-Dasar untuk Analis Data (2026)
NumPy array bikin hitungan data di Python jauh lebih cepat dari list biasa. Ini dasar bikin, slicing, dan operasi array buat analis.
Alternatif iterrows yang Lebih Cepat di Pandas
iterrows nyaman ditulis tapi lambat. Ini urutan alternatif iterrows di pandas dari yang tercepat, plus benchmark biar kamu tau kapan pakai yang mana.