Python

Pandas’ta Hiyerarşik İndeksleme (MultiIndex) ve Veri Birleştirme

maa
12.01.2026

Gerçek Hayat Verileriyle Anlamak

Veriyle çalışmaya başladığınızda ilk fark ettiğiniz şey şudur:
Gerçek dünya verileri, Excel tabloları kadar “düz” değildir.

Bir satır çoğu zaman yalnızca tek bir bilgiyle tanımlanmaz.
Örneğin:

  • Bir eyaletin nüfusu hem eyalete hem yıla bağlıdır

  • Bir çalışanın bilgileri hem departmana hem tarihe bağlıdır

  • Bir ölçüm hem zamana hem sensöre bağlıdır

İşte Pandas’ın MultiIndex (Hiyerarşik İndeks) yapısı tam olarak bu ihtiyaca cevap verir.

Bu yazıda:

  • MultiIndex nedir?

  • Ne zaman gerçekten gerekir?

  • Nasıl oluşturulur?

  • Stack / Unstack ne işe yarar?

  • concat ve merge arasındaki fark nedir?

sorularını bol örnekle ve sade bir dille ele alacağız.


Pandas’ta İndeks Nedir ve Neden Önemlidir?

Pandas’ta her veri yapısının (Series, DataFrame) mutlaka bir index’i vardır.

Basit bir örnek:

import pandas as pd

s = pd.Series([10, 20, 30])
print(s)

Çıktı:

0 10
1 20
2 30

Buradaki 0,1,2 değerleri verinin kimliği gibidir.
Ancak çoğu zaman bu kimlik yeterli değildir.


Tek İndeks Gerçek Hayatta Neden Yetmez?

Şimdi biraz daha gerçekçi bir veri düşünelim:

  • California – 2000 – nüfus

  • California – 2010 – nüfus

  • Texas – 2000 – nüfus

  • Texas – 2010 – nüfus

Bu veri setinde:

  • Aynı eyalet birden fazla kez

  • Aynı yıl birden fazla kez

geçmektedir.

Bu durumda “satırı ne tanımlar?” sorusu ortaya çıkar.

Cevap: Eyalet + Yıl birlikte

İşte bu noktada MultiIndex devreye girer.


MultiIndex (Hiyerarşik İndeks) Nedir?

MultiIndex, bir satırı birden fazla indeks seviyesiyle tanımlamamızı sağlar.

Yani tek bir etiket yerine:

(State, Year)

şeklinde katmanlı bir indeks kullanırız.


Basit Bir MultiIndex Örneği

import pandas as pd

index = [
("California", 2000),
("California", 2010),
("Texas", 2000),
("Texas", 2010)
]
population = [33871648, 37253956, 20851820, 25145561]
pop = pd.Series(population, index=index)
print(pop)

Çıktı:

California 2000 33871648
2010 37253956
Texas 2000 20851820
2010 25145561
dtype: int64

Bu yapı çalışır ama hâlâ eksiktir.
Çünkü Pandas bu indeksleri resmî olarak MultiIndex olarak tanımamıştır.


Doğru Yöntem: pd.MultiIndex

Pandas, MultiIndex için özel bir yapı sunar:

index = pd.MultiIndex.from_tuples(
[("California", 2000), ("California", 2010),
("Texas", 2000), ("Texas", 2010)],
names=["State", "Year"]
)

pop = pd.Series(population, index=index)
print(pop)

Artık Pandas bu veriyi iki seviyeli indeks olarak tanır.


MultiIndex ile Veri Seçmek Ne Kadar Kolay?

Sadece bir eyaletin tüm yılları

pop["California"]

Sadece 2000 yılına ait tüm eyaletler

pop[:, 2000]

Tek bir hücreye erişmek

pop["Texas", 2010]

Bu işlemleri for döngüsü yazmadan, manuel filtre yapmadan yapabiliyor olmak Pandas’ın en büyük gücüdür.


DataFrame ile MultiIndex Kullanımı

Aynı veriyi DataFrame olarak düşünelim:

df = pop.to_frame(name="Population")
print(df)

Bu yapı özellikle raporlama ve analiz için daha uygundur.


Stack ve Unstack: Veri Şeklini Değiştirmek

MultiIndex analitik olarak güçlüdür ama her zaman okunabilir değildir.

Unstack: Satırı Sütuna Çevirir

df_unstacked = df.unstack()
print(df_unstacked)

Çıktı:

Year 2000 2010
State
California 33871648 37253956
Texas 20851820 25145561

Bu yapı:

  • Raporlama

  • Karşılaştırma

  • Grafik çizimi

için çok daha uygundur.


Stack: Tekrar Uzun Formata Dönmek

df_unstacked.stack()

Bu dönüşümlere veri dünyasında:

  • Long format

  • Wide format

dönüşümü denir.


reset_index ve set_index Ne İşe Yarar?

reset_index

İndeksi sütuna çevirir:

df_reset = df.reset_index()

set_index

Sütunu tekrar indeks yapar:

df_reset.set_index(["State", "Year"])

Bu iki fonksiyon, veri yapısını ihtiyaca göre esnek biçimde değiştirmenizi sağlar.


Veri Birleştirme: concat vs merge

concat: Etiket Bazlı Birleştirme

pd.concat([df1, df2])
  • Satır veya sütun bazlıdır

  • İçeriğe bakmaz

  • İndeks ve sütun etiketlerini hizalar

merge: İçerik Bazlı Birleştirme (SQL Mantığı)

pd.merge(df1, df2, on="employee")
  • Değerleri eşleştirir

  • One-to-one, one-to-many ilişkileri destekler

  • Gerçek hayatta en sık kullanılan yöntemdir


concat Ne Zaman, merge Ne Zaman?

DurumKullan
Aynı yapıda tabloları alt alta eklemekconcat
Anahtar sütuna göre eşleştirmekmerge
SQL benzeri join işlemimerge

Sonuç: Neden MultiIndex Öğrenmelisiniz?

Çünkü:

  • Gerçek dünya verileri çok boyutludur

  • Zaman serileri ve panel veriler MultiIndex olmadan eksik kalır

  • Kodlar daha kısa, okunabilir ve güçlü olur

  • Pandas’ın asıl gücü burada ortaya çıkar

MultiIndex ilk başta karmaşık görünür; ancak bir kez mantığını kavradığınızda Pandas’ta “ileri seviye” kapısını açar.


Kaynakça 

Bu yazıyı paylaş:
Twitter Facebook LinkedIn

Benzer Yazılar