Membuat MultiIndex
Bangun indeks baris hierarkis dengan pd.MultiIndex.from_tuples atau set_index pada beberapa kolom, lalu periksa tingkat-tingkatnya.
Membuat MultiIndex adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Apa Itu MultiIndex?
MultiIndex (juga disebut indeks hierarkis) memungkinkan DataFrame atau Series Pandas memiliki beberapa tingkat label baris. Anggaplah ini sebagai kunci gabungan dalam basis data: alih-alih mengidentifikasi baris dengan satu label, Anda mengidentifikasinya dengan tuple seperti (negara, kota) atau (tahun, kuartal). MultiIndexes penting untuk merepresentasikan data panel, deret waktu lintas bagian, dan setiap dataset dengan struktur pengelompokan dua tingkat yang alami.
import pandas as pd
# A simple example: sales by country and city
data = {
'sales': [100, 200, 150, 300, 80, 120]
}
index = pd.MultiIndex.from_tuples(
[('USA', 'New York'), ('USA', 'Chicago'),
('UK', 'London'), ('UK', 'Manchester'),
('DE', 'Berlin'), ('DE', 'Munich')],
names=['country', 'city']
)
df = pd.DataFrame(data, index=index)
print(df)Membuat MultiIndex dengan from_tuples
pd.MultiIndex.from_tuples(list_of_tuples, names=) adalah cara paling eksplisit untuk membuat MultiIndex. Setiap tuple menjadi satu label baris, dan elemennya menjadi tingkat-tingkat indeks. Parameter names menetapkan label untuk setiap tingkat (misalnya ['year', 'quarter']). Metode ini berguna ketika Anda memiliki daftar kunci gabungan yang telah dibuat sebelumnya dan ingin menggunakannya sebagai indeks baris.
import pandas as pd
# Multi-level time index: year x quarter
tuples = [
(2022, 'Q1'), (2022, 'Q2'), (2022, 'Q3'), (2022, 'Q4'),
(2023, 'Q1'), (2023, 'Q2'), (2023, 'Q3'), (2023, 'Q4')
]
mi = pd.MultiIndex.from_tuples(tuples, names=['year', 'quarter'])
revenue = [120, 135, 145, 160, 130, 148, 162, 175]
df = pd.Series(revenue, index=mi, name='revenue_M')
print(df)Membuat MultiIndex dengan from_product
pd.MultiIndex.from_product(iterables, names=) membuat MultiIndex dari hasil kali Kartesius beberapa daftar—setiap kombinasi elemen dari daftar masukan. Ini adalah metode yang paling praktis ketika semua kombinasi tingkat harus ada dalam data Anda. Misalnya, seluruh kombinasi 3 tahun × 4 kuartal × 5 wilayah secara otomatis membuat panel seimbang dengan 60 baris.
import pandas as pd
import numpy as np
years = [2021, 2022, 2023]
quarters = ['Q1', 'Q2', 'Q3', 'Q4']
# Cartesian product: 3 years x 4 quarters = 12 combinations
mi = pd.MultiIndex.from_product([years, quarters], names=['year', 'quarter'])
print('Number of index entries:', len(mi))
print('First 6 entries:', mi[:6].tolist())
# Create a DataFrame with this index
df = pd.DataFrame({'revenue': np.random.randint(100, 200, 12)}, index=mi)
print('\n', df.head())Membuat MultiIndex dengan set_index
Cara paling umum untuk membuat MultiIndex dalam praktik adalah memulai dengan DataFrame biasa yang memiliki kolom pengelompokan, lalu memanggil df.set_index([col1, col2]). Cara ini mengubah kolom-kolom tersebut dari kolom data menjadi tingkat indeks. Hasilnya sama seperti jika Anda membuat indeks dari awal dengan from_tuples, tetapi hanya memerlukan satu baris kode yang dimulai dari data tabular.
import pandas as pd
# Start with a flat DataFrame
df_flat = pd.DataFrame({
'country': ['USA', 'USA', 'UK', 'UK', 'DE', 'DE'],
'year': [2022, 2023, 2022, 2023, 2022, 2023],
'gdp_bn': [25000, 26000, 3100, 3200, 4200, 4350]
})
# Promote two columns to a MultiIndex
df = df_flat.set_index(['country', 'year'])
print(df)
print('\nIndex type:', type(df.index).__name__)
print('Index names:', df.index.names)Memeriksa Tingkat MultiIndex
MultiIndex menyimpan datanya dalam levels (nilai unik pada setiap tingkat) dan codes (penunjuk bilangan bulat ke dalam array tingkat). Periksa tingkat dengan df.index.levels atau df.index.get_level_values(level). Gunakan df.index.nlevels untuk memeriksa jumlah tingkat yang ada. Atribut names mencantumkan nama yang diberikan kepada setiap tingkat—tetapkan nama tersebut dengan df.index.set_names(['level0', 'level1']).
import pandas as pd
df_flat = pd.DataFrame({
'country': ['USA', 'USA', 'UK', 'UK'],
'year': [2022, 2023, 2022, 2023],
'gdp': [25000, 26000, 3100, 3200]
})
df = df_flat.set_index(['country', 'year'])
print('Number of levels:', df.index.nlevels)
print('Level names:', df.index.names)
print('Level 0 values:', df.index.get_level_values(0).tolist())
print('Level 1 values:', df.index.get_level_values(1).tolist())
print('Unique level 0:', df.index.get_level_values('country').unique().tolist())MultiIndex pada Kolom
MultiIndex juga dapat diterapkan pada kolom, sehingga menciptakan hierarki label kolom. Hal ini umum dilakukan ketika Anda menyimpan beberapa metrik untuk setiap kategori dalam tata letak bergaya pivot—misalnya (pendapatan, Q1), (pendapatan, Q2), (biaya, Q1), (biaya, Q2). Akses kolom dengan MultiIndex dengan cara yang sama seperti mengakses baris—menggunakan tuple. Buat MultiIndex kolom dengan pd.MultiIndex.from_product dan tetapkan ke df.columns.
import pandas as pd
import numpy as np
# Create a DataFrame with MultiIndex columns
metrics = ['revenue', 'cost']
quarters = ['Q1', 'Q2', 'Q3', 'Q4']
col_index = pd.MultiIndex.from_product([metrics, quarters], names=['metric', 'quarter'])
data = np.random.randint(50, 200, size=(3, 8))
df = pd.DataFrame(data, columns=col_index, index=['USA', 'UK', 'DE'])
df.index.name = 'country'
print(df)MultiIndex Setelah Agregasi GroupBy
Ketika Anda memanggil groupby([col1, col2]).agg(...), DataFrame yang dihasilkan memiliki MultiIndex pada barisnya (dua kunci groupby menjadi dua tingkat indeks) dan kemungkinan MultiIndex pada kolomnya (jika Anda mengagregasikan beberapa metrik). Inilah cara paling umum menemukan MultiIndex dalam analisis data sehari-hari—memahami cara menavigasinya sangat penting untuk bekerja dengan hasil groupby.
import pandas as pd
import seaborn as sns
tips = sns.load_dataset('tips')
# Two-key groupby creates a MultiIndex on rows
result = tips.groupby(['day', 'time'])['total_bill'].agg(['mean', 'count'])
print(result)
print('\nIndex type:', type(result.index).__name__)
print('Index names:', result.index.names)Menukar dan Mengurutkan Ulang Tingkat
Gunakan df.swaplevel() untuk menukar dua tingkat indeks, dan df.reorder_levels([...]) untuk mengubah urutan semua tingkat. Pengurutan ulang berguna ketika Anda ingin melakukan pemotongan berdasarkan tingkat bagian dalam terlebih dahulu, atau ketika dua DataFrame memiliki tingkat indeks dalam urutan berbeda dan perlu diselaraskan sebelum digabungkan. Setelah mengurutkan ulang, selalu panggil sort_index() untuk memulihkan urutan leksikografis agar pemotongan berlangsung efisien.
import pandas as pd
import seaborn as sns
tips = sns.load_dataset('tips')
result = tips.groupby(['day', 'time'])['total_bill'].mean()
print('Original levels:', result.index.names)
# Swap so time is the outer level
swapped = result.swaplevel().sort_index()
print('\nSwapped levels:', swapped.index.names)
print(swapped.head())Memeriksa dan Mengurutkan MultiIndex
Pemotongan pada MultiIndex hanya efisien jika indeks diurutkan secara leksikografis. Periksa apakah indeks telah diurutkan dengan df.index.is_monotonic_increasing. Jika hasilnya False, urutkan dengan df.sort_index(). MultiIndex yang tidak diurutkan memicu PerformanceWarning pada operasi pemotongan dan dapat menghasilkan hasil yang keliru dalam beberapa kasus khusus—selalu urutkan setelah membuat atau mengubah MultiIndex.
import pandas as pd
# Create an unsorted MultiIndex deliberately
tuples = [('B', 2), ('A', 1), ('B', 1), ('A', 2)]
mi = pd.MultiIndex.from_tuples(tuples, names=['letter', 'num'])
df = pd.DataFrame({'value': [10, 20, 30, 40]}, index=mi)
print('Is sorted:', df.index.is_monotonic_increasing)
print('Before sorting:')
print(df)
df_sorted = df.sort_index()
print('\nAfter sorting:')
print(df_sorted)
print('Is sorted:', df_sorted.index.is_monotonic_increasing)Mengatur Ulang MultiIndex Menjadi Kolom
Panggil df.reset_index() untuk mengubah semua tingkat indeks kembali menjadi kolom biasa, sehingga DataFrame memiliki RangeIndex bilangan bulat biasa. Ini adalah pola umum setelah agregasi groupby: hitung ringkasan yang dikelompokkan dengan MultiIndex, lalu reset indeks untuk mendapatkan DataFrame datar yang sesuai untuk operasi Pandas lanjutan, penggabungan, atau ekspor ke CSV. Gunakan reset_index(level='name') untuk mereset hanya satu tingkat dari indeks dua tingkat.
import pandas as pd
import seaborn as sns
tips = sns.load_dataset('tips')
result = tips.groupby(['day', 'time'])['total_bill'].mean()
print('MultiIndex result:')
print(result.head(4))
# Flatten back to a regular DataFrame
flat = result.reset_index()
print('\nFlattened DataFrame:')
print(flat.head(4))
print('Index type:', type(flat.index).__name__)Kapan Menggunakan MultiIndex
Gunakan MultiIndex ketika data Anda memiliki struktur hierarkis alami: deret waktu dengan perincian di bawah harian (tanggal + jam), data panel (entitas + periode waktu), atau pengelompokan bertingkat (negara + wilayah + kota). Hindari MultiIndex untuk kunci pengelompokan dua kolom sederhana jika DataFrame datar dengan kolom terpisah sama mudahnya untuk dibaca. Jika Anda terus-menerus memanggil reset_index() hanya untuk mengakses data, itu menandakan bahwa MultiIndex tidak memberikan manfaat dalam alur kerja Anda.
Pemeriksaan Singkat
Uji pemahaman Anda tentang pembuatan MultiIndex dari pelajaran ini.
Ringkasan Pelajaran
Dalam pelajaran ini Anda mempelajari bahwa MultiIndexes menyediakan label baris (atau kolom) hierarkis menggunakan tuple, yang dibuat dengan from_tuples, from_product, atau set_index pada beberapa kolom, dan selalu diurutkan agar slicing efisien. Selanjutnya kita akan mempelajari cara memilih data dari MultiIndex menggunakan .loc, tuple, irisan, dan pembantu IndexSlice.
Belajar Python dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membuat MultiIndex” gratis?
Ya — teks lengkap “Membuat MultiIndex” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Membuat MultiIndex”?
Bangun indeks baris hierarkis dengan pd.MultiIndex.from_tuples atau set_index pada beberapa kolom, lalu periksa tingkat-tingkatnya. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?
Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Membuat MultiIndex” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?
Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Membuat MultiIndex
- Memilih Data dari MultiIndex
- Penyelarasan dan Pengindeksan Ulang
- Manfaat Kinerja Indeks Terurut