0Pricing
Pandas & NumPy Academy · Ders

MultiIndex ile stack ve unstack

En içteki sütun düzeyini stack() ile satır indeksine taşıyın ve unstack() ile geri çevirin.

MultiIndex ile stack ve unstack, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 3. 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.

stack ve unstack'e Giriş

stack() ve unstack(), verileri satır dizini ile sütun dizini arasında taşıyan Pandas yeniden şekillendirme araçlarıdır. Her iki eksende de MultiIndex bulunan DataFrame'lerle çalışırken özellikle kullanışlıdırlar. stack() en içteki sütun düzeyini alıp en içteki satır düzeyine dönüştürür; unstack() ise bunun tersini yapar.

stack(): Sütunları Satırlara Dönüştürme

DataFrame.stack(), sütun etiketlerinin en iç düzeyini satır dizininin en iç düzeyine döndürerek daha uzun ve daha dar bir sonuç üretir. Özgün DataFrame basit (çok düzeyli olmayan) sütunlara sahipse sonuç, MultiIndex içeren bir Series olur. Sütunlar birden fazla düzeye sahipse stack() sütun düzeylerini bir azaltır.

import pandas as pd

df = pd.DataFrame({
    'Math': [85, 90, 78],
    'Science': [92, 88, 95]
}, index=['Alice', 'Bob', 'Carol'])

print(df)
#        Math  Science
# Alice    85       92
# Bob      90       88
# Carol    78       95

stacked = df.stack()
print(stacked)
# Alice    Math       85
#          Science    92
# Bob      Math       90
#          Science    88
# Carol    Math       78
#          Science    95
# dtype: int64

unstack(): Satırlardan Sütunlara

Series.unstack() (veya DataFrame.unstack()), stack() işleminin tersidir. Satır dizininin en iç düzeyini alır ve yeni sütun etiketlerine dönüştürerek daha geniş bir sonuç üretir. İşlevsel olarak pivot() işlemine benzer; ancak sütun değerleri yerine doğrudan dizin üzerinde çalışır.

stacked = df.stack()
print(type(stacked))  # Series with MultiIndex

# Restore the original wide format
df_restored = stacked.unstack()
print(df_restored)
#        Math  Science
# Alice    85       92
# Bob      90       88
# Carol    78       95

# Identical to the original df!

Hangi Düzeyin stack Edileceğini Seçme

Sütunlarında MultiIndex bulunan DataFrame'lerde stack(level), hangi düzeyin döndürüleceğini seçmenizi sağlar. Bir düzey numarası (en dış düzey için 0, en iç düzey için -1; varsayılan) veya bir düzey adı verin. Benzer şekilde unstack(level), sütunlara döndürülecek satır dizini düzeyini seçer. Bu ayrıntılı denetim, karmaşık hiyerarşik veri yapılarını incelemek için gereklidir.

# MultiIndex columns
arrays = [['Math', 'Math', 'Science', 'Science'],
          ['Q1', 'Q2', 'Q1', 'Q2']]
multi_cols = pd.MultiIndex.from_arrays(arrays, names=['subject', 'quarter'])

df_multi = pd.DataFrame([[85, 90, 92, 88], [78, 80, 95, 91]],
                        index=['Alice', 'Bob'], columns=multi_cols)

# Stack the 'quarter' level (innermost, level=-1)
print(df_multi.stack(level='quarter').head())

Belirli Satır Düzeylerinde unstack()

DataFrame satırlarda bir MultiIndex içerdiğinde (birden fazla sütun üzerinde groupby() sonrasında bu durum yaygındır), belirli bir satır düzeyini unstack() ederek sütunlara yayabilirsiniz. Bu, açıkça pivot_table() çağırmadan çapraz tablo tarzı özetler oluşturmak için çok yaygın bir kalıptır.

# GroupBy produces MultiIndex rows
df2 = pd.DataFrame({
    'region': ['East', 'East', 'West', 'West'],
    'product': ['A', 'B', 'A', 'B'],
    'sales': [100, 150, 120, 200]
})

# MultiIndex result from groupby
multi = df2.groupby(['region', 'product'])['sales'].sum()
print(multi)

# Unstack the product level into columns
wide = multi.unstack('product')
print(wide)
# product    A    B
# region
# East     100  150
# West     120  200

stack/unstack İşlemlerinde Eksik Değerleri Ele Alma

unstack() çağrıldığında her sütun düzeyi için her satır dizini birleşimi mevcut değilse Pandas, eksik hücreleri NaN ile doldurur. Buna karşılık stack(), varsayılan olarak tamamen NaN olan satırları kaldırır. Bu davranışı dropna parametresiyle denetleyebilirsiniz: NaN satırlarını korumak için stack(dropna=False) aktarın.

# Incomplete data: West has no product B
df3 = df2[df2['product'] != 'B'].copy()
multi3 = df3.groupby(['region', 'product'])['sales'].sum()

wide3 = multi3.unstack('product', fill_value=0)
print(wide3)
# product    A    B
# region
# East     100    0  <- B filled with 0 instead of NaN
# West     120    0

Önce stack(), Sonra Satırlar Üzerinde Hesaplama

Güçlü bir kalıp, geniş bir DataFrame'i stack() ile sütunları satırlara dönüştürecek şekilde daraltmak, ardından filtreleme veya groupby gibi satır bazlı bir işlem uygulamak ve son olarak geniş biçime dönmek için unstack() kullanmaktır. Bu yaklaşım, sütun sütun döngüler yazma gereğini ortadan kaldırır ve kodunuzu vektörleştirilmiş ve okunabilir tutar. Özellikle aynı dönüşümü tüm sütunlara eşzamanlı uygulamak için kullanışlıdır.

# Normalise each column by its column mean using stack/compute/unstack
normalised = (
    df.stack()
      .groupby(level=1)
      .transform(lambda s: (s - s.mean()) / s.std())
      .unstack()
)
print(normalised.round(2))
#        Math  Science
# Alice  0.0     0.39
# Bob    1.13   -1.09
# Carol -1.13    0.71

Çizim İçin stack()

melt() gibi stack() de verileri Seaborn'un ve birçok Matplotlib yardımcısının beklediği uzun biçime dönüştürür. Temel fark, stack() işleminin sütun dizini üzerinde çalışıp MultiIndex yapısını koruması; melt() işleminin ise düz bir uzun DataFrame üretmesidir. Her ikisi de benzer çizim iş akışlarına olanak sağlar.

# Prepare data for line plot using stack
long = df.stack().reset_index()
long.columns = ['student', 'subject', 'score']
print(long)
#   student  subject  score
# 0   Alice     Math     85
# 1   Alice  Science     92
# ...

# Ready for: sns.barplot(data=long, x='student', y='score', hue='subject')

Dizinleri Yeniden Sıralamak İçin swaplevel()

Yığınlama sonrasında en içteki satır düzeyi, özgün sütun adıdır. Bazen dış düzeyin değişken adı, iç düzeyin ise özgün satır dizini olmasını istersiniz. İki düzeyin sırasını değiştirmek için MultiIndex üzerinde swaplevel() kullanın, ardından düzenli bir sıralamayı yeniden oluşturmak için sort_index() çağırın.

stacked = df.stack()  # MultiIndex: (student, subject)
swapped = stacked.swaplevel()  # MultiIndex: (subject, student)
swapped = swapped.sort_index()
print(swapped)
# subject  student
# Math     Alice      85
#          Bob        90
#          Carol      78
# Science  Alice      92
#          Bob        88
#          Carol      95

stack, melt ve pivot Ne Zaman Kullanılır

MultiIndex sütunları içeren DataFrame'lerle çalışırken ve sütun düzeylerini bir azaltmak istediğinizde stack() seçin. Düz bir DataFrame'iniz varsa ve hangi sütunların satır olacağını denetleyerek geniş biçimden uzun biçime geçmek istiyorsanız melt() kullanın. Uzun biçimden yeniden geniş biçime geçmek için pivot()/pivot_table() seçin. Bu üç araç, Pandas'taki tüm geniş/uzun biçim dönüştürme gereksinimlerini karşılar.

# Decision guide (comment, not executable standalone):
# MultiIndex columns -> want fewer levels: use stack()
# Flat wide -> need long format for plotting/ML: use melt()
# Long -> need wide summary table: use pivot_table()
# Wide -> back to long: use melt() or stack()

# Example: stack when you have pivot_table output (MultiIndex cols)
tbl = df2.groupby(['region', 'product'])['sales'].sum().unstack()
long_again = tbl.stack().rename('sales').reset_index()
print(long_again)

Uygulamalı Özet: Yeniden Şekillendirme Kısa Rehberi

Kısa bir zihinsel model şöyledir: stack() — sütunlar satırlara dönüşür, DataFrame daha dar ve daha uzun olur. unstack() — satırlar sütunlara açılır, DataFrame daha geniş ve daha kısa olur. melt() — adlandırılmış sütunlar bir anahtar-değer çiftine (iki yeni sütuna) dönüşür. pivot_table() — bir anahtar-değer sütunu birden çok sütuna açılır. Dördü de tersine çevrilebilir; hangi yönde ilerleyeceğinizi bilmek, hedef analizinizin geniş mi yoksa uzun mu biçimi tercih ettiğine karar vermenizden ibarettir.

# stack/unstack cycle
df_wide = df.copy()             # wide format
df_long = df_wide.stack()       # long via stack
df_wide2 = df_long.unstack()    # back to wide

# melt/pivot cycle
df_melted = df_wide.melt(id_vars=[])    # wide -> long
# df_pivoted = df_melted.pivot(...)     # long -> wide

print('Original shape:  ', df_wide.shape)
print('After stack:     ', df_long.shape)
print('After unstack:   ', df_wide2.shape)

Hızlı Kontrol

Bu derste öğrendiklerinizle MultiIndex içeren stack ve unstack konusundaki anlayışınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: stack(), daha uzun ve dar bir sonuç üretmek için sütun etiketlerini satır dizinine döndürür; unstack() bunun tersini yaparak bir satır dizini düzeyini sütunlara döndürür; her ikisi de groupby işlemlerinden elde edilen MultiIndex yapılarıyla çalışır; swaplevel() ise dizin düzeylerini yeniden sıralamanızı sağlar. Sırada, kategorik sütunlar arasındaki hızlı sıklık tabloları için pd.crosstab() var.

Sıkça Sorulan Sorular

“MultiIndex ile stack ve unstack” dersi ücretsiz mi?

Evet — “MultiIndex ile stack ve unstack” 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 ile stack ve unstack” dersinde ne öğreneceğim?

En içteki sütun düzeyini stack() ile satır indeksine taşıyın ve unstack() ile geri çevirin. 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 3. dersidir.

“MultiIndex ile stack ve unstack” 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

  1. pivot_table: Çapraz Tablo
  2. melt: Geniş Biçimden Uzun Biçime
  3. MultiIndex ile stack ve unstack
  4. Frekans Tabloları için crosstab
← Pandas & NumPy Academy Sayfasına Dön