0Pricing
Pandas & NumPy Academy · Ders

İ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.0

join() İç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.0

Birden Ç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   SF

Bir 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    Bob

merge() İç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           20

Birleş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.5

Dizinle 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

  1. DataFrame'leri Yığmak için pd.concat
  2. pd.merge: İç ve Dış Birleştirmeler
  3. Sol ve Sağ Birleştirmeler
  4. İndekse Göre Birleştirme
← Pandas & NumPy Academy Sayfasına Dön