İndekse Göre Birleştirme
İndekslerine göre hizalanan DataFrame'leri birleştirmek için DataFrame.join() kullanın ve merge() içinde left_index/right_index=True ayarlayın.
İndekse Göre Birleştirme, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 4. 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.
Dizin Tabanlı Birleştirmeler
Şimdiye kadar DataFrame'leri normal sütunlardaki değerleri eşleştirerek birleştirdiniz. Ancak bazen eşleştirmek istediğiniz bilgiler bir sütun yerine DataFrame'in dizininde saklanır. Pandas, dizin tabanlı birleştirmeleri DataFrame.join() aracılığıyla ve left_index=True veya right_index=True parametreleriyle pd.merge() aracılığıyla destekler.
DataFrame.join() Yöntemi
DataFrame.join(other), varsayılan olarak her iki DataFrame'in dizinleri üzerinden birleştirme yapan kolaylık sağlayan bir yöntemdir. left_index=True, right_index=True ile yapılan bir pd.merge() çağrısına denktir. Varsayılan birleştirme türü, varsayılan olarak 'inner' kullanan pd.merge()'den farklı olarak 'left' türüdür. Birleştirmenin doğru sonuçlar üretmesi için her iki DataFrame'in anlamlı dizin etiketlerini paylaşması gerekir.
import pandas as pd
profiles = pd.DataFrame(
{'age': [25, 30, 22]},
index=['alice', 'bob', 'carol']
)
scores = pd.DataFrame(
{'score': [88, 95, 70]},
index=['alice', 'carol', 'dave']
)
# join: left join on index (default)
result = profiles.join(scores)
print(result)
# age score
# alice 25 88.0
# bob 30 NaN <- bob has no score
# carol 22 95.0join() İçindeki Birleştirme Türünü Denetleme
Hangi satırların korunacağını denetlemek için pd.merge() ile yaptığınız gibi join() yöntemine how parametresini geçin. Seçenekler 'left' (varsayılan), 'right', 'inner' ve 'outer' şeklindedir. Örneğin how='inner', yalnızca her iki DataFrame'de de bulunan dizinleri tutar; sağ tabloda eşleşen bir dizini yoksa alice satırını kaldırır.
# Inner join on index: only rows present in BOTH indices
print(profiles.join(scores, how='inner'))
# age score
# alice 25 88
# carol 22 70
# Outer join: all indices from both
print(profiles.join(scores, how='outer'))
# age score
# alice 25.0 88.0
# bob 30.0 NaN
# carol 22.0 70.0
# dave NaN 95.0Birden Çok DataFrame'i Tek Seferde Birleştirme
join() yönteminin pd.merge()'e göre önemli bir avantajı, bir DataFrame listesi kabul ederek bunların tümünü tek çağrıda çağıran DataFrame ile birleştirmesidir. Tüm DataFrame'lerin dizinlerinin hizalanmış olması gerekir. Kullanıcı kimliği veya tarih gibi aynı anahtara göre dizinlenmiş çok sayıda özellik tablonuz olduğunda ve bunları geniş bir DataFrame'de bir araya getirmek istediğinizde bu yöntem çok kullanışlıdır.
emails = pd.DataFrame({'email': ['a@x.com', 'b@x.com', 'c@x.com']},
index=['alice', 'bob', 'carol'])
city = pd.DataFrame({'city': ['NY', 'LA', 'SF']},
index=['alice', 'bob', 'carol'])
# Join multiple DataFrames at once
result = profiles.join([emails, city])
print(result)
# age email city
# alice 25 a@x.com NY
# bob 30 b@x.com LA
# carol 22 c@x.com SFBir Tablodaki Sütunla Diğerindeki Dizini Birleştirme
pd.merge(), left_on/right_index veya left_index/right_on kullanarak sütun tabanlı ve dizin tabanlı eşleştirmeleri birlikte kullanmanızı sağlar. Bu, bir DataFrame'in anahtarı bir sütunda, diğerinin ise dizin olarak sakladığı durumlarda yararlıdır. Bunu yalnızca join() ile gerçekleştiremezsiniz.
# orders has customer_id as a column; customers is indexed by customer_id
customers_indexed = pd.DataFrame(
{'name': ['Alice', 'Bob', 'Carol']},
index=[101, 102, 103]
)
orders = pd.DataFrame({
'order_id': [1, 2, 3],
'customer_id': [101, 102, 101]
})
result = pd.merge(orders, customers_indexed,
left_on='customer_id', right_index=True)
print(result)
# order_id customer_id name
# 0 1 101 Alice
# 2 3 101 Alice
# 1 2 102 Bobmerge() İçinde left_index ve right_index Kullanma
Her iki DataFrame de anahtarı dizin olarak içerdiğinde pd.merge(left, right, left_index=True, right_index=True) kullanın. Bu, join() yöntemine denktir; ancak varsayılan 'inner' birleştirme türünü ve daha açık parametreleri kullanır. Ayrıca suffixes ve indicator gibi diğer tüm pd.merge() parametrelerine erişim kazanırsınız.
# Both DataFrames indexed by user_id
demog = pd.DataFrame({'age': [25, 30]}, index=[1, 2])
behav = pd.DataFrame({'clicks': [10, 5]}, index=[1, 2])
# Equivalent joins
result1 = demog.join(behav) # left join
result2 = pd.merge(demog, behav, left_index=True, right_index=True) # inner join
print(result1)
print(result2)Dizin Tabanlı Birleştirmeler Neden Kullanılır?
DataFrame'leriniz kullanıcı kimliği, ürün SKU'su veya tarih gibi anlamlı bir tanımlayıcıyla doğal olarak anahtarlanıyorsa dizin tabanlı birleştirmeler tercih edilir. Birleştirmelerde dizini kullanmak, gereksiz anahtar sütunlarıyla DataFrame'inizi karmaşıklaştırmanızı önler ve Pandas, O(log n) arama işlemleri için sıralanmış dizin yapılarını koruduğundan daha hızlı olabilir. DatetimeIndex'in doğal birleştirme anahtarı olduğu zaman serisi verilerinde özellikle yaygındır.
# Time series example: join temperature and humidity by date index
import numpy as np
dates = pd.date_range('2024-01-01', periods=5)
temp = pd.DataFrame({'temp_c': [10, 12, 9, 11, 13]}, index=dates)
humid = pd.DataFrame({'humidity': [65, 70, 60, 75, 68]}, index=dates)
weather = temp.join(humid)
print(weather.head())Çakışan Sütun Adlarını İşleme
Her iki DataFrame de anahtar dışındaki aynı ada sahip sütunlar içerdiğinde, lsuffix ve rsuffix parametrelerini sağlamadığınız sürece join() varsayılan olarak ValueError oluşturur. Bu parametreler, pd.merge() içindeki suffixes gibi çalışır ve soldaki ve sağdaki DataFrame'lerde çakışan sütun adlarına sırasıyla birer dize ekler.
df_a = pd.DataFrame({'value': [1, 2]}, index=['x', 'y'])
df_b = pd.DataFrame({'value': [10, 20]}, index=['x', 'y'])
# Without suffixes: raises ValueError
# result = df_a.join(df_b)
# With suffixes: disambiguate column names
result = df_a.join(df_b, lsuffix='_left', rsuffix='_right')
print(result)
# value_left value_right
# x 1 10
# y 2 20Birleştirmeden Önce set_index
Yaygın bir iş akışı, bir sütunu dizin olarak ayarlamaktır; böylece join() söz dizimini kullanabilirsiniz. Birleştirmeden sonra reset_index(), anahtarı normal bir sütun olarak geri getirir. Bu yaklaşım doğal biçimde okunur: anahtarı dizine yükseltin, birleştirin, ardından anahtarı tekrar normal sütuna dönüştürün. Böylece kodun amacını gelecekte okuyacak kişiler için açık hale getirirsiniz.
orders_col = pd.DataFrame({'order_id': [1,2,3], 'customer_id': [10,20,10], 'amount': [100,200,150]})
cust_col = pd.DataFrame({'customer_id': [10,20], 'name': ['Alice','Bob']})
result = (
orders_col.set_index('customer_id')
.join(cust_col.set_index('customer_id'), how='left')
.reset_index()
)
print(result)Series'i DataFrame Diziniyle Hizalama
Bir Series nesnesinin de bir dizini vardır ve atama kullanarak bunu bir DataFrame'e yeni bir sütun olarak ekleyebilirsiniz — Pandas, Series değerlerini eşleşen dizin etiketleriyle otomatik olarak hizalar. Bu, merge() veya join() çağırmadan bir Series'ten tek bir sütun eklemek istediğinizde kullanılabilen, dizin tabanlı birleştirmenin yalın bir biçimidir.
df = pd.DataFrame({'sales': [100, 200, 150]}, index=['A', 'B', 'C'])
tax_rate = pd.Series({'A': 0.1, 'B': 0.2, 'C': 0.15})
# Index alignment: Series aligns to DataFrame index automatically
df['tax'] = df['sales'] * tax_rate
print(df)
# sales tax
# A 100 10.0
# B 200 40.0
# C 150 22.5Dizinle Birleştirme Performansı
Sıralanmış bir dizin üzerinde birleştirme yapmak, normal bir sütun üzerinde birleştirme yapmaktan daha hızlıdır; çünkü Pandas sıralanmış dizinde ikili arama kullanır. Aynı anahtarla tekrar tekrar birleştirme yapıyorsanız bu anahtarı veri işleme akışınızın başında bir kez dizin olarak ayarlayın. Bu, binlerce dosyada DatetimeIndex ile defalarca birleştirme yaptığınız zaman serisi iş akışlarında özellikle önemlidir.
# Sort index before repeated joins for speed
left = left.sort_index()
right = right.sort_index()
# Both sorted -> Pandas uses merge path with binary search
result = left.join(right, how='inner')
# Check if index is sorted
print('Left sorted:', left.index.is_monotonic_increasing)
print('Right sorted:', right.index.is_monotonic_increasing)Hızlı Kontrol
Bu derste öğrendiğiniz dizin tabanlı birleştirmeleri ne kadar iyi anladığınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: DataFrame.join() varsayılan olarak dizin üzerinde sol birleştirme yapar; left_index=True/right_index=True ile birlikte kullanılan pd.merge() daha fazla denetim sağlar; join() işlevine bir liste vererek birden çok DataFrame'i aynı anda birleştirebilirsiniz ve sıralanmış bir dizin birleştirme performansını artırır. Sırada DataFrame'leri pivot_table ile yeniden şekillendirmeyi inceleyeceğiz.
Sıkça Sorulan Sorular
“İndekse Göre Birleştirme” dersi ücretsiz mi?
Evet — “İndekse Göre Birleştirme” 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.
“İndekse Göre Birleştirme” dersinde ne öğreneceğim?
İndekslerine göre hizalanan DataFrame'leri birleştirmek için DataFrame.join() kullanın ve merge() içinde left_index/right_index=True ayarlayı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 4. dersidir.
“İndekse Göre Birleştirme” 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
- DataFrame'leri Yığmak için pd.concat
- pd.merge: İç ve Dış Birleştirmeler
- Sol ve Sağ Birleştirmeler
- İndekse Göre Birleştirme