MultiIndex'ten Veri Seçme
Dış ve iç indeks düzeylerindeki verileri demetler, dilimler ve pd.IndexSlice yardımcısıyla .loc kullanarak alın.
MultiIndex'ten Veri Seçme, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 2. 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.
Hiyerarşik Verilerde Gezinme
Bir MultiIndex'e sahip olduğunuzda, veri alt kümelerini almak için verimli yöntemlere ihtiyaç duyarsınız. Pandas bunun için üç araç sağlar: tam etiket seçimi için .loc ve demetler, düzeyler arasında aralık seçimi için slice() ve pd.IndexSlice ve belirli bir düzey değerindeki kesiti seçmek için .xs(). Bu erişim örüntülerinde ustalaşmak, hiyerarşik indekslemenin tüm gücünü kullanmanızı sağlar.
import pandas as pd
import numpy as np
# Setup: GDP data by country and year
df_flat = pd.DataFrame({
'country': ['USA','USA','USA','UK','UK','UK','DE','DE','DE'],
'year': [2021, 2022, 2023, 2021, 2022, 2023, 2021, 2022, 2023],
'gdp_bn': [23000, 25000, 26000, 3000, 3100, 3200, 4100, 4200, 4350]
})
df = df_flat.set_index(['country', 'year']).sort_index()
print(df)Dış Düzeye Göre .loc ile Seçim
Bu gruptaki tüm satırları almak için .loc[] ifadesine tek bir dış düzey etiketi geçirin. İki düzeyli bir MultiIndex'te (ülke, yıl), df.loc['USA'] yalnızca iç indeks (yıl) korunacak şekilde tüm USA satırlarını DataFrame olarak döndürür. Bu davranışa düzey bırakma adı verilir; dış düzeyde belirli bir değer seçtiğinizde Pandas bu düzeyi döndürülen nesnenin indeksinden kaldırır.
import pandas as pd
df_flat = pd.DataFrame({
'country': ['USA','USA','USA','UK','UK','UK'],
'year': [2021, 2022, 2023, 2021, 2022, 2023],
'gdp_bn': [23000, 25000, 26000, 3000, 3100, 3200]
})
df = df_flat.set_index(['country', 'year']).sort_index()
# Select all USA rows
usa = df.loc['USA']
print('All USA rows:')
print(usa)
print('\nRemaining index type:', usa.index.name)Belirli Bir Demeti .loc ile Seçme
Her iki indeks düzeyiyle tanımlanan tek bir satırı almak için .loc[] ifadesine bir demet geçirin: df.loc[('USA', 2022)]. Bu ifade, tam olarak bu (dış, iç) etiket birleşimine karşılık gelen bir Series döndürür (tek sütun için skaler değer döndürür). Series yerine bir DataFrame elde etmek istiyorsanız demeti bir listenin içine geçirmeniz gerekir: df.loc[[('USA', 2022)]].
import pandas as pd
df_flat = pd.DataFrame({
'country': ['USA','USA','USA','UK','UK','UK'],
'year': [2021, 2022, 2023, 2021, 2022, 2023],
'gdp_bn': [23000, 25000, 26000, 3000, 3100, 3200],
'cpi': [3.2, 5.1, 4.8, 2.5, 3.4, 3.0]
})
df = df_flat.set_index(['country', 'year']).sort_index()
# Single row as Series
print('USA 2022 (Series):')
print(df.loc[('USA', 2022)])
# Single row as DataFrame
print('\nUSA 2022 (DataFrame):')
print(df.loc[[('USA', 2022)]])Demetlerden Oluşan Listeyle Birden Çok Satır Seçme
Aynı anda birden fazla belirli satırı seçmek için .loc[]'a demetlerden oluşan bir liste aktarın. Bu, bileşik anahtarlarla tanımlanan bitişik olmayan bir satır alt kümesine ihtiyaç duyduğunuzda kullanışlıdır — örneğin Almanya hariç USA ve UK için 2022 verileri. Sonuç, döndürülen DataFrame içindeki MultiIndex'i korur.
import pandas as pd
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]
})
df = df_flat.set_index(['country', 'year']).sort_index()
# Select specific (country, year) combinations
subset = df.loc[[('USA', 2022), ('UK', 2023), ('DE', 2022)]]
print(subset)pd.IndexSlice ile Dilimleme
pd.IndexSlice (genellikle idx adıyla kısaltılır), ayrıntılı demet dilimlerini elle oluşturmadan MultiIndex düzeyleri için aralık dilimleri yazmanızı sağlar. Sözdizimi: df.loc[idx[outer_slice, inner_slice], column_slice]. Örneğin df.loc[idx['UK':'USA', 2022:2023], :], dış düzeyi UK ile USA arasında ve iç düzeyi 2022 ile 2023 arasında olan tüm satırları seçer. Bunun doğru çalışması için dizinin sıralanmış olması gerekir.
import pandas as pd
import numpy as np
years = [2021, 2022, 2023]
countries = ['DE', 'UK', 'USA']
mi = pd.MultiIndex.from_product([countries, years], names=['country', 'year'])
df = pd.DataFrame({'gdp': np.random.randint(3000, 26000, 9)}, index=mi)
idx = pd.IndexSlice
# Select UK and USA for years 2022 and 2023
subset = df.loc[idx['UK':'USA', 2022:2023], :]
print(subset).xs() ile Kesit Erişimi
df.xs(key, level=), diğer düzeylerin değerlerinden bağımsız olarak belirli bir düzeyin verilen değere eşit olduğu tüm satırları seçer. Önce dış düzeyleri belirtmenizi gerektiren .loc'un aksine .xs, ada göre doğrudan herhangi bir düzeye erişebilir. Örneğin df.xs(2022, level='year'), 'USA', 'UK' veya 'DE' belirtmeye gerek kalmadan tüm ülkelerdeki 2022 satırlarını döndürür.
import pandas as pd
import numpy as np
countries = ['DE', 'UK', 'USA']
years = [2021, 2022, 2023]
mi = pd.MultiIndex.from_product([countries, years], names=['country', 'year'])
df = pd.DataFrame({'gdp': [4100,4200,4350, 3000,3100,3200, 23000,25000,26000]}, index=mi)
# All countries for year 2022 (inner level)
print('All data for year 2022:')
print(df.xs(2022, level='year'))
# All years for UK (outer level)
print('\nAll years for UK:')
print(df.xs('UK', level='country'))MultiIndex Sütunlarına Erişim
Bir DataFrame'in sütunlarında MultiIndex varsa belirli sütunlara erişmek için demetleri kullanın: df[('revenue', 'Q1')]. Bir dış düzeydeki tüm sütunları seçmek için (örneğin tüm gelir sütunları) df['revenue'] kullanın; bu, söz konusu dış anahtarın altındaki tüm iç düzey sütunlarını içeren bir DataFrame döndürür. pd.IndexSlice deseni, .loc ile birlikte kullanıldığında sütun çoklu dizinlerinde de çalışır.
import pandas as pd
import numpy as np
metrics = ['revenue', 'cost']
quarters = ['Q1', 'Q2', 'Q3', 'Q4']
cols = pd.MultiIndex.from_product([metrics, quarters], names=['metric', 'quarter'])
df = pd.DataFrame(
np.random.randint(50, 200, (3, 8)),
columns=cols,
index=['USA', 'UK', 'DE']
)
# Access all revenue columns
print('Revenue columns:')
print(df['revenue'])
# Access a specific cell
print('\nUSA revenue Q1:', df.loc['USA', ('revenue', 'Q1')])Tüm Dış Anahtarlar Arasında İç Düzeyi Seçme
Tüm dış düzey değerleri arasından tek bir iç düzey değerini seçmek için .loc ile dış düzey için slice(None) ifadesini birlikte kullanın: df.loc[(slice(None), 2022), :]. Bu ifade her ülkenin 2022 satırını seçer. pd.IndexSlice sürümü daha okunabilirdir: df.loc[idx[:, 2022], :]. Bu desen, belirli bir zaman noktasındaki tüm varlıkların anlık görüntüsünü almak istediğinizde sıkça gerekir.
import pandas as pd
import numpy as np
countries = ['DE', 'UK', 'USA']
years = [2021, 2022, 2023]
mi = pd.MultiIndex.from_product([countries, years], names=['country', 'year'])
df = pd.DataFrame({'gdp': [4100,4200,4350, 3000,3100,3200, 23000,25000,26000]}, index=mi)
idx = pd.IndexSlice
# All countries for year 2022 (using IndexSlice)
all_2022 = df.loc[idx[:, 2022], :]
print('All countries in 2022:')
print(all_2022)MultiIndex Seçiminde Yaygın Hatalar
Üç yaygın hata vardır: 1) Sıralanmamış dizin: sıralanmamış bir MultiIndex'i dilimlemek UnsortedIndexError oluşturur veya yanlış sonuçlar döndürür — her zaman önce sort_index() çağrısı yapın. 2) Anahtar olarak demetle KeyError: bir demeti .loc[] içine almadan aktarırsanız Python bunu konuma dayalı dizinleme olarak yorumlar — etiket tabanlı MultiIndex erişimi için her zaman .loc kullanın. 3) Düzey uyuşmazlığı: groupby sonrasında MultiIndex düzey adları beklediğiniz adlarla eşleşmeyebilir — dilimlemeden önce df.index.names değerini kontrol edin.
import pandas as pd
# Unsorted MultiIndex slicing
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)
# Sort before slicing
df = df.sort_index()
print('After sort:', df.index.is_monotonic_increasing)
idx = pd.IndexSlice
print('\nSlice A:')
print(df.loc[idx['A', :], :])Uygulamalı Örnek: Çeyreklik Raporlama
Somut bir kullanım örneği: (bölge, çeyrek) temelinde dizinlenmiş satış verileriniz var ve yıl sonu raporu için tüm bölgelerdeki Q4 verilerini çıkarmanız gerekiyor. Bu kesiti tek çağrıda almak için .xs('Q4', level='quarter') kullanın. Ardından toplamı .sum() ile hesaplayın. Bu desen — groupby toplulaştırması → MultiIndex sonucu → kesit çıkarma — iş raporlama veri işleme hatlarında son derece yaygındır.
import pandas as pd
import numpy as np
regions = ['North', 'South', 'East', 'West']
quarters = ['Q1', 'Q2', 'Q3', 'Q4']
mi = pd.MultiIndex.from_product([regions, quarters], names=['region', 'quarter'])
np.random.seed(42)
df = pd.DataFrame({
'sales': np.random.randint(200, 500, 16),
'units': np.random.randint(50, 150, 16)
}, index=mi)
# Extract Q4 performance across all regions
q4 = df.xs('Q4', level='quarter')
print('Q4 Results by Region:')
print(q4)
print('\nQ4 Total Sales:', q4['sales'].sum())MultiIndex Seçimini Sütunlarla Birleştirme
.loc[row_indexer, column_list] kullanarak belirli satırları ve sütunları aynı anda seçebilirsiniz. MultiIndex ile satır dizinleyicisi bir demet, demetlerden oluşan bir liste veya IndexSlice; sütun dizinleyicisi ise bir sütun adı ya da ad listesidir. Bu sayede hiyerarşik bir DataFrame'den tek bir ifade ile kesin olarak belirlenmiş dikdörtgen bir alt tablo çıkarabilirsiniz.
import pandas as pd
import numpy as np
countries = ['DE', 'UK', 'USA']
years = [2021, 2022, 2023]
mi = pd.MultiIndex.from_product([countries, years], names=['country', 'year'])
df = pd.DataFrame({
'gdp': [4100,4200,4350, 3000,3100,3200, 23000,25000,26000],
'inflation': [1.5, 2.1, 2.8, 2.0, 3.4, 2.9, 3.2, 5.1, 4.8],
'unemployment': [5.0, 4.8, 4.5, 4.5, 4.2, 4.0, 3.8, 3.5, 3.3]
}, index=mi)
idx = pd.IndexSlice
# UK and USA, years 2022-2023, only gdp and inflation
result = df.loc[idx['UK':'USA', 2022:2023], ['gdp', 'inflation']]
print(result)Kısa Kontrol
Bu derste öğrendikleriniz doğrultusunda MultiIndex seçimi anlayışınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: belirli (dış, iç) etiket birleşimlerini seçmek için demetlerle .loc kullanmayı, tüm düzeyler arasındaki aralık dilimleri için pd.IndexSlice kullanmayı ve dış anahtarlardan bağımsız olarak herhangi bir düzeydeki kesiti çıkarmak için .xs() kullanmayı. UnsortedIndexError hatasını önlemek için her zaman önce dizini sıralayın. Sırada, dizin hizalamasını ve yeniden dizinlemeyi — Pandas'ın iki DataFrame'i ortak bir dizinle nasıl hizaladığını — inceleyeceğiz.
Sıkça Sorulan Sorular
“MultiIndex'ten Veri Seçme” dersi ücretsiz mi?
Evet — “MultiIndex'ten Veri Seçme” 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'ten Veri Seçme” dersinde ne öğreneceğim?
Dış ve iç indeks düzeylerindeki verileri demetler, dilimler ve pd.IndexSlice yardımcısıyla .loc kullanarak alın. 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 2. dersidir.
“MultiIndex'ten Veri Seçme” 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ı