Penyelarasan dan Pengindeksan Ulang
Selaraskan dua DataFrames ke indeks bersama dengan reindex(), isi label yang hilang, dan pahami cara operasi aritmetika menyelaraskan indeks.
Penyelarasan dan Pengindeksan Ulang adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.
Cara Pandas Menyelaraskan Indeks
Salah satu perilaku Pandas yang paling kuat — dan terkadang mengejutkan — adalah penyelarasan indeks otomatis. Ketika Anda menjumlahkan, mengurangkan, atau menggabungkan dua Series atau DataFrame dengan cara lain, Pandas terlebih dahulu menyelaraskannya berdasarkan label indeks sebelum menjalankan operasi. Label yang cocok akan dioperasikan; label yang tidak cocok menghasilkan NaN. Hal ini mencegah kesalahan tersembunyi akibat data yang tidak selaras dan membuat data dari berbagai sumber aman untuk digabungkan tanpa perlu mengurutkan atau menyusun ulang secara manual terlebih dahulu.
import pandas as pd
s1 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
s2 = pd.Series([1, 2, 3], index=['b', 'c', 'd'])
# Alignment in action: a→NaN, d→NaN
result = s1 + s2
print('s1 + s2 with automatic alignment:')
print(result)NaN dari Indeks yang Tidak Selaras
Ketika label indeks tidak cocok, Pandas mengisi entri yang hilang dengan NaN. Ini disengaja: nilai tersebut menandakan bahwa “tidak ada nilai yang bersesuaian dari salah satu operand”. Selalu periksa hasil operasi aritmetika antara dua Series atau DataFrame untuk menemukan nilai NaN yang tidak terduga — nilai tersebut menandakan indeks tidak selaras. Gunakan fill_value=0 dalam metode aritmetika (s1.add(s2, fill_value=0)) untuk memperlakukan nilai selaras yang hilang sebagai nol, bukan meneruskan NaN.
import pandas as pd
s1 = pd.Series({'a': 10, 'b': 20, 'c': 30})
s2 = pd.Series({'b': 1, 'c': 2, 'd': 3})
# Default: NaN where labels don't match
print('Default (NaN for unmatched):')
print(s1 + s2)
# fill_value=0: treat missing as zero
print('\nWith fill_value=0:')
print(s1.add(s2, fill_value=0))Penyelarasan Aritmetika DataFrame
Penyelarasan berlaku untuk baris dan kolom saat menggabungkan dua DataFrame. Hasilnya memiliki gabungan kedua himpunan indeks dan kedua himpunan kolom, dengan NaN di setiap posisi yang tidak memiliki nilai pada salah satu DataFrame. Ini setara dengan penggabungan luar penuh pada indeks dan kolom secara bersamaan. Artinya, Anda dapat menjumlahkan DataFrame dari periode fiskal yang berbeda dengan aman — bulan yang hanya ada di salah satunya akan mendapatkan NaN, yang kemudian dapat Anda isi atau hapus.
import pandas as pd
df1 = pd.DataFrame({'revenue': [100, 200], 'cost': [80, 150]}, index=['Jan', 'Feb'])
df2 = pd.DataFrame({'revenue': [120, 210], 'headcount': [5, 6]}, index=['Feb', 'Mar'])
result = df1 + df2
print('Combined DataFrame (union of index and columns):')
print(result)Metode reindex()
df.reindex(new_index) mengembalikan DataFrame baru yang disesuaikan dengan daftar label new_index. Label yang ada pada indeks asli dan indeks baru dipertahankan; label dalam new_index yang tidak ada pada indeks asli mendapatkan NaN; label pada indeks asli yang tidak ada dalam new_index akan dihapus. Ini adalah cara eksplisit untuk menyelaraskan DataFrame dengan kumpulan label target sebelum menjalankan operasi.
import pandas as pd
s = pd.Series({'a': 10, 'b': 20, 'c': 30})
# Reindex to a new label set
reindexed = s.reindex(['b', 'c', 'd', 'e'])
print('Original:', s.index.tolist())
print('New index: [b, c, d, e]')
print('\nReindexed Series:')
print(reindexed)
# b, c preserved; d, e → NaN; a droppedMengisi Nilai yang Hilang Setelah Pengindeksan Ulang
reindex() menerima parameter fill_value untuk mengganti label baru dengan konstanta, serta parameter method untuk pengisian maju ('ffill') atau pengisian mundur ('bfill'). Metode pengisian ini paling berguna untuk data deret waktu ketika Anda melakukan pengindeksan ulang Series ke rentang tanggal lengkap dan ingin mengisi hari yang hilang dengan nilai terakhir yang diketahui, bukan NaN.
import pandas as pd
# Sparse daily data with gaps
s = pd.Series(
[10, 20, 30],
index=pd.to_datetime(['2024-01-01', '2024-01-03', '2024-01-07'])
)
# Reindex to complete date range
full_range = pd.date_range('2024-01-01', '2024-01-07')
print('Forward fill (carry last known value):')
print(s.reindex(full_range, method='ffill'))
print('\nFill with 0:')
print(s.reindex(full_range, fill_value=0))Pengindeksan Ulang Kolom
reindex juga berfungsi pada kolom: df.reindex(columns=['col1', 'col2', 'new_col']). Kolom baru yang tidak ada pada DataFrame asli akan ditambahkan dengan NaN. Kolom yang ada tetapi tidak tercantum dalam daftar baru akan dihapus. Ini berguna untuk menerapkan skema kolom kanonis pada beberapa DataFrame yang berasal dari sumber berbeda dan mungkin memiliki kumpulan kolom yang tidak konsisten.
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob'],
'age': [30, 25],
'city': ['NY', 'LA']
})
# Enforce a canonical column order and add missing columns
canonical_cols = ['name', 'age', 'email', 'city', 'country']
df_reindexed = df.reindex(columns=canonical_cols)
print(df_reindexed)
# 'email' and 'country' are new → NaNMenggunakan align() untuk Menyinkronkan Dua Objek
s1.align(s2) mengembalikan dua objek baru dengan indeks yang sama (gabungan atau irisan berdasarkan parameter join), sehingga keduanya siap untuk operasi per elemen. Ini setara dengan melakukan pengindeksan ulang pada kedua objek secara bersamaan ke kumpulan label yang sama. Gunakan join='inner' untuk mempertahankan hanya label yang sama, atau join='outer' (default) untuk mempertahankan semua label dari keduanya, dengan NaN pada ketidakcocokan.
import pandas as pd
s1 = pd.Series({'a': 10, 'b': 20, 'c': 30})
s2 = pd.Series({'b': 1, 'c': 2, 'd': 3})
# Align to common labels only (inner join)
s1_aligned, s2_aligned = s1.align(s2, join='inner')
print('Inner-aligned s1:')
print(s1_aligned)
print('Inner-aligned s2:')
print(s2_aligned)
print('\nProduct on common labels:')
print(s1_aligned * s2_aligned)Penyelarasan dalam merge vs. Aritmetika
Pandas menawarkan dua pendekatan untuk menggabungkan DataFrame: merge/join (bergaya SQL, pencocokan kunci secara eksplisit) dan aritmetika dengan penyelarasan indeks (implisit, berdasarkan label). Gunakan merge ketika menggabungkan tabel terstruktur dengan kolom kunci yang jelas. Gunakan penyelarasan aritmetika ketika melakukan perhitungan antara DataFrame yang sewajarnya memiliki indeks yang sama — misalnya, mengurangkan DataFrame biaya dari DataFrame pendapatan yang keduanya diindeks berdasarkan (wilayah, bulan).
import pandas as pd
# Two DataFrames sharing the same index
revenue = pd.Series({'North': 500, 'South': 300, 'East': 450})
costs = pd.Series({'North': 350, 'South': 280, 'West': 400})
# Automatic alignment: 'East' and 'West' don't match → NaN
profit = revenue - costs
print('Profit by region:')
print(profit)
# If you want only common regions
profit_inner = revenue.align(costs, join='inner')[0] - revenue.align(costs, join='inner')[1]
print('\nProfit (common regions only):')
print(profit_inner)Memeriksa Kesamaan Indeks Sebelum Operasi
Sebelum menjalankan operasi pada dua DataFrame, periksa apakah indeksnya sama dengan (df1.index == df2.index).all(). Jika indeks hanya berbeda dalam urutan, urutkan keduanya sebelum membandingkan. Untuk DataFrame yang dimuat dari sumber berbeda, sebaiknya lakukan penyelarasan atau pengindeksan ulang secara eksplisit sebelum operasi aritmetika untuk menghindari penyebaran NaN yang tidak disengaja. Dokumentasikan setiap asumsi penyelarasan dalam komentar atau catatan alur kerja.
import pandas as pd
df1 = pd.DataFrame({'sales': [100, 200, 300]}, index=['Q1', 'Q2', 'Q3'])
df2 = pd.DataFrame({'cost': [80, 160, 240]}, index=['Q1', 'Q2', 'Q3'])
# Check index equality
if (df1.index == df2.index).all():
print('Indices match — safe to combine.')
combined = pd.concat([df1, df2], axis=1)
combined['profit'] = combined['sales'] - combined['cost']
print(combined)
else:
print('Indices differ — align before combining!')Pola Praktis: Menyeragamkan Bentuk
Pola umum saat memuat data dari beberapa file atau panggilan API adalah setiap batch mencakup subset kunci yang berbeda. Sebelum melakukan penggabungan atau agregasi, lakukan pengindeksan ulang pada semua batch ke ruang kunci lengkap yang telah diketahui dengan fill_value=0. Ini memastikan setiap batch memiliki bentuk yang sama (indeks dan kolom yang sama) sebelum operasi, sehingga mencegah ketidaksesuaian bentuk tersembunyi yang menyebabkan hasil agregasi salah.
import pandas as pd
# Two sales batches with different product sets
batch1 = pd.Series({'laptop': 50, 'phone': 80, 'tablet': 30})
batch2 = pd.Series({'phone': 90, 'tablet': 40, 'headphones': 60})
# Full product catalogue
all_products = ['laptop', 'phone', 'tablet', 'headphones']
# Standardise both to the full catalogue
b1 = batch1.reindex(all_products, fill_value=0)
b2 = batch2.reindex(all_products, fill_value=0)
total = b1 + b2
print('Total sales per product:')
print(total)Kasus Tepi Penyelarasan Indeks
Dua kasus tepi penting: Label duplikat — jika kedua Series memiliki label indeks duplikat, penyelarasan menghasilkan perluasan menyerupai hasil kali Kartesius dengan banyak nilai NaN (Pandas tidak mengasumsikan duplikat mana yang saling berpasangan). Selalu pastikan indeks unik sebelum melakukan penyelarasan aritmetika. Indeks bilangan bulat vs. objek — RangeIndex(0,5) dan Int64Index([0,1,2,3,4]) mungkin tidak terselaraskan secara sempurna setelah operasi karena yang satu diinferensikan, sedangkan yang lain ditentukan secara eksplisit. Gunakan reset_index(drop=True) untuk menormalkan.
import pandas as pd
# Duplicate label alignment — produces unexpected expansion
s1 = pd.Series([1, 2, 3], index=['a', 'a', 'b'])
s2 = pd.Series([10, 20], index=['a', 'b'])
result = s1 + s2
print('Result with duplicate indices (unexpected expansion):')
print(result)
print('\nAlways ensure unique indices before arithmetic!')Pemeriksaan Singkat
Uji pemahaman Anda tentang penyelarasan indeks dan pengindeksan ulang dari pelajaran ini.
Ringkasan Pelajaran
Dalam pelajaran ini Anda mempelajari: Pandas melakukan penyelarasan indeks otomatis pada operasi aritmetika dan menghasilkan NaN untuk label yang tidak cocok, reindex() menyesuaikan DataFrame dengan sekumpulan label target menggunakan opsi pengisian untuk label yang hilang, dan align() menyinkronkan dua objek ke indeks yang sama secara bersamaan. Selanjutnya kita akan membahas manfaat kinerja indeks yang terurut dan cara mengukurnya dengan timeit.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Penyelarasan dan Pengindeksan Ulang” gratis?
Ya — teks lengkap “Penyelarasan dan Pengindeksan Ulang” 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 “Penyelarasan dan Pengindeksan Ulang”?
Selaraskan dua DataFrames ke indeks bersama dengan reindex(), isi label yang hilang, dan pahami cara operasi aritmetika menyelaraskan indeks. 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 3 dari 4.
Berapa lama pelajaran “Penyelarasan dan Pengindeksan Ulang” 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