MultiIndex Oluşturma
pd.MultiIndex.from_tuples ile veya birden çok sütunda set_index kullanarak hiyerarşik bir satır indeksi oluşturun ve düzeylerini inceleyin.
MultiIndex Oluşturma, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
MultiIndex Nedir
MultiIndex (hiyerarşik indeks olarak da adlandırılır), bir Pandas DataFrame veya Series nesnesinin birden çok satır etiketi düzeyine sahip olmasını sağlar. Bunu bir veritabanındaki bileşik anahtar gibi düşünebilirsiniz: bir satırı tek bir etiketle tanımlamak yerine, (ülke, şehir) veya (yıl, çeyrek) gibi bir demetle tanımlarsınız. MultiIndexes, panel verilerini, yatay kesitli zaman serilerini ve doğal olarak iki düzeyli gruplama yapısına sahip tüm veri kümelerini temsil etmek için gereklidir.
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)from_tuples ile MultiIndex Oluşturma
pd.MultiIndex.from_tuples(list_of_tuples, names=), bir MultiIndex oluşturmanın en açık yoludur. Her demet bir satır etiketi olur ve öğeleri düzeyleri oluşturur. names parametresi her düzeye bir etiket atar (ör. ['year', 'quarter']). Bu yöntem, satır indeksi olarak kullanmak istediğiniz, önceden oluşturulmuş bileşik anahtar listesine sahip olduğunuzda kullanışlıdır.
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)from_product ile MultiIndex Oluşturma
pd.MultiIndex.from_product(iterables, names=), birden çok listenin Kartezyen çarpımından bir MultiIndex oluşturur; yani girdi listelerindeki öğelerin tüm kombinasyonlarını üretir. Düzeylerin tüm kombinasyonlarının verilerinizde bulunması gerektiğinde en kullanışlı yöntem budur. Örneğin 3 yıl × 4 çeyrek × 5 bölgenin tüm kombinasyonları, otomatik olarak 60 satırlık dengeli bir panel oluşturur.
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())set_index ile MultiIndex Oluşturma
Uygulamada MultiIndex oluşturmanın en yaygın yolu, gruplama sütunlarını içeren normal bir DataFrame ile başlayıp df.set_index([col1, col2]) çağrısı yapmaktır. Bu işlem, söz konusu sütunları veri sütunlarından indeks düzeylerine dönüştürür. Sonuç, indeksi from_tuples ile sıfırdan oluşturmuşsunuzla aynıdır; ancak tablo biçimindeki verilerden başlayarak yalnızca bir satır gerektirir.
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)MultiIndex Düzeylerini İnceleme
Bir MultiIndex verilerini düzeylerde (her düzeydeki benzersiz değerler) ve kodlarda (düzey dizilerine işaret eden tamsayı göstergeleri) saklar. Düzeyleri df.index.levels veya df.index.get_level_values(level) ile inceleyin. Kaç düzey bulunduğunu kontrol etmek için df.index.nlevels kullanın. names özniteliği, her düzeye atanan adı listeler; bu adları df.index.set_names(['level0', 'level1']) ile ayarlayın.
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())Sütunlarda MultiIndex
Bir MultiIndex, sütunlara da uygulanarak hiyerarşik sütun etiketleri oluşturabilir. Bu kullanım, her kategori için birden çok metriği özet tablo düzeninde sakladığınızda yaygındır; örneğin (gelir, Q1), (gelir, Q2), (maliyet, Q1), (maliyet, Q2). Sütunlara, satırlara eriştiğiniz şekilde, yani demetleri kullanarak erişin. pd.MultiIndex.from_product ile bir sütun MultiIndex'i oluşturun ve bunu df.columns'a atayın.
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)GroupBy Toplamasından Sonra MultiIndex
groupby([col1, col2]).agg(...) çağrısı yaptığınızda, ortaya çıkan DataFrame'in satırlarında bir MultiIndex bulunur (iki groupby anahtarı iki indeks düzeyine dönüşür) ve birden çok metriği toplarsanız sütunlarında da potansiyel olarak bir MultiIndex oluşur. Günlük veri analizinde bir MultiIndex ile karşılaşmanın en yaygın yolu budur; groupby sonuçlarında nasıl gezinileceğini anlamak çok önemlidir.
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)Düzeyleri Değiştirme ve Yeniden Sıralama
İki indeks düzeyini yer değiştirmek için df.swaplevel(), tüm düzeylerin sırasını değiştirmek için df.reorder_levels([...]) kullanın. Yeniden sıralama, önce iç düzeye göre dilimlemek istediğinizde veya iki DataFrame'in indeks düzeyleri farklı sıradayken birleştirme öncesinde hizalanmaları gerektiğinde kullanışlıdır. Yeniden sıralamadan sonra, verimli dilimleme için sözlükbilimsel sırayı geri yüklemek üzere her zaman sort_index() çağrısı yapın.
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())MultiIndex'i Denetleme ve Sıralama
Bir MultiIndex üzerinde dilimleme yalnızca indeks sözlükbilimsel olarak sıralanmışsa verimlidir. İndeksin sıralı olup olmadığını df.index.is_monotonic_increasing ile kontrol edin. Sonuç False ise df.sort_index() ile sıralayın. Sıralanmamış bir MultiIndex, dilimleme işlemlerinde PerformanceWarning tetikler ve bazı özel durumlarda yanlış sonuçlar döndürebilir; bir MultiIndex oluşturduktan veya değiştirdikten sonra her zaman sıralama yapın.
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)MultiIndex'i Sütunlara Sıfırlama
Tüm indeks düzeylerini normal sütunlara dönüştürmek ve DataFrame'i düz bir tamsayı RangeIndex ile bırakmak için df.reset_index() çağrısını kullanın. Bu, groupby toplamalarından sonra yaygın bir örüntüdür: gruplandırılmış özeti bir MultiIndex ile hesaplayın, ardından daha ileri Pandas işlemleri, birleştirme veya CSV'ye aktarma için uygun düz bir DataFrame elde etmek üzere indeksi sıfırlayın. İki düzeyli bir indeksin yalnızca bir düzeyini sıfırlamak için reset_index(level='name') kullanın.
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__)MultiIndex Ne Zaman Kullanılır
Verileriniz doğal bir hiyerarşik yapıya sahip olduğunda MultiIndex kullanın: gün içi ayrıntı düzeyine sahip zaman serileri (tarih + saat), panel verileri (varlık + zaman aralığı) veya iç içe gruplamalar (ülke + bölge + şehir). Ayrı sütunlara sahip düz bir DataFrame aynı ölçüde okunabilirse, basit iki sütunlu grup anahtarları için MultiIndex kullanmaktan kaçının. Verilere erişmek için kendinizi sürekli olarak yalnızca reset_index() çağrısı yaparken buluyorsanız, bu MultiIndex'in iş akışınıza değer katmadığının bir işaretidir.
Kısa Kontrol
Bu dersteki MultiIndex oluşturma konusundaki anlayışınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: MultiIndexes, demetleri kullanarak hiyerarşik satır (veya sütun) etiketleri sağlar; birden çok sütunda from_tuples, from_product veya set_index ile oluşturulur ve verimli dilimleme için her zaman sıralanır. Sırada .loc, demetler, dilimler ve IndexSlice yardımcı aracıyla bir MultiIndex'ten nasıl veri seçileceğini inceleyeceğiz.
Sıkça Sorulan Sorular
“MultiIndex Oluşturma” dersi ücretsiz mi?
Evet — “MultiIndex Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
“MultiIndex Oluşturma” dersinde ne öğreneceğim?
pd.MultiIndex.from_tuples ile veya birden çok sütunda set_index kullanarak hiyerarşik bir satır indeksi oluşturun ve düzeylerini inceleyin. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“MultiIndex Oluşturma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- MultiIndex Oluşturma
- MultiIndex'ten Veri Seçme
- İndeks Hizalama ve Yeniden İndeksleme
- Sıralı İndekslerin Performans Faydaları