Pandas & NumPy Academy · Ders

Tek ve Birden Çok Anahtarla GroupBy

groupby() ile bir veya daha fazla sütuna göre gruplandırın ve sum, mean, count ile min/max toplulaştırmalarını uygulayın.

2. ders / 413 adım

Tek ve Birden Çok Anahtarla GroupBy, 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.

Tek Anahtarla GroupBy

En basit GroupBy çağrısı, gruplama anahtarı olarak tek bir sütun kullanır. df.groupby('column_name') çağrısını yapar ve bir toplama yöntemi zincirlersiniz. Pandas, bu sütundaki her unique değer için bir grup oluşturur ve toplama yöntemini her sayısal sütuna (veya seçilen sütuna) uygular. Bu, günlük analizlerde en sık kullanılan GroupBy biçimidir.

import pandas as pd

df = pd.DataFrame({
    'dept': ['Eng', 'HR', 'Eng', 'HR', 'Eng'],
    'salary': [90000, 60000, 95000, 62000, 88000],
    'years': [3, 5, 7, 2, 4]
})

print(df.groupby('dept')['salary'].mean())
# dept
# Eng    91000.0
# HR     61000.0

Hangi Sütunların Toplanacağını Seçme

groupby() çağrısından sonra, köşeli parantez gösterimiyle tek bir sütun seçerek bir SeriesGroupBy elde edebilir veya bir listeyle birden fazla sütun seçerek bir DataFrameGroupBy elde edebilirsiniz. Seçimi tamamen atlarsanız Pandas tüm sayısal sütunları toplar. Bu kullanışlıdır; ancak ilgisiz sayısal sütunlarınız olduğunda beklenmedik sonuçlar üretebilir.

# Single column result -> SeriesGroupBy
print(df.groupby('dept')['salary'].sum())

# Multiple columns result -> DataFrameGroupBy
print(df.groupby('dept')[['salary', 'years']].mean())
#        salary  years
# dept
# Eng   91000.0    4.667
# HR    61000.0    3.500

Yaygın Tüm Toplama Yöntemleri

Pandas, GroupBy nesnelerinde eksiksiz bir yerleşik toplama yöntemi kümesini destekler: sum(), mean(), median(), min(), max(), count(), std(), var(), first() ve last(). Her biri grup başına bir skaler değer döndürür ve gruplama anahtarına göre indekslenmiş, düzenli bir özet tablosu oluşturur.

g = df.groupby('dept')['salary']
print('sum:   ', g.sum())
print('mean:  ', g.mean())
print('min:   ', g.min())
print('max:   ', g.max())
print('count: ', g.count())
print('std:   ', g.std().round(2))

Birden Çok Anahtarla GroupBy

Aynı anda birden fazla boyuta göre gruplama yapmak için groupby() işlevine bir sütun adı listesi verin. Bu sütunlardaki her unique değer birleşimi kendi grubunu oluşturur. Sonuç, her gruplama sütunu için bir düzey içeren bir MultiIndex barındırır; böylece boyutlar arası özetlerde tek adımda ayrıntıya inebilirsiniz.

df2 = pd.DataFrame({
    'dept':   ['Eng', 'Eng', 'HR',  'HR',  'Eng', 'HR'],
    'level':  ['L1',  'L2',  'L1',  'L2',  'L1',  'L1'],
    'salary': [80000, 100000, 55000, 70000, 82000, 58000]
})

result = df2.groupby(['dept', 'level'])['salary'].mean()
print(result)
# dept  level
# Eng   L1       81000.0
#       L2      100000.0
# HR    L1       56500.0
#       L2       70000.0

MultiIndex Sonuçlarına Erişme

Birden fazla anahtara göre gruplama yaptığınızda sonuç indeksi bir MultiIndex olur. .loc['value'] ile belirli bir dış düzeye erişebilir ve demetlerle iç düzeylerde gezinebilirsiniz. reset_index() çağrısı, MultiIndex'i normal sütunlara dönüştürerek düzleştirir; bu, sonraki işlemler veya dışa aktarma için genellikle daha kullanışlıdır.

result = df2.groupby(['dept', 'level'])['salary'].mean()

# Access Engineering rows only
print(result.loc['Eng'])
# level
# L1     81000.0
# L2    100000.0

# Flatten to a regular DataFrame
print(result.reset_index())
#   dept level    salary
# 0  Eng    L1   81000.0
# 1  Eng    L2  100000.0

as_index=False Kullanımı

Varsayılan olarak gruplama sütunları sonucun indeksi olur. as_index=False geçirmek, bunları normal sütunlar olarak tutar ve sonraki Pandas işlemlerine aktarması veya dışa aktarması daha kolay, düz bir DataFrame elde etmenizi sağlar. Bu, sonuç üzerinde reset_index() çağırmaya denktir.

flat = df2.groupby(['dept', 'level'], as_index=False)['salary'].mean()
print(flat)
#   dept level    salary
# 0  Eng    L1   81000.0
# 1  Eng    L2  100000.0
# 2   HR    L1   56500.0
# 3   HR    L2   70000.0

Grup Başına Satırları Sayma

count(), her gruptaki boş olmayan değerlerin sayısını döndürür. Boş değerlerden bağımsız olarak grup başına toplam satır sayısını istiyorsanız bunun yerine size() kullanın. Verilerinizde eksik değerler olduğunda bu ayrım önemlidir; çünkü count(), NaN girdileri içeren grupların sayısını olduğundan az gösterecektir.

import numpy as np

df3 = pd.DataFrame({
    'dept': ['Eng', 'Eng', 'HR', 'HR'],
    'bonus': [5000, np.nan, 3000, 4000]
})

print(df3.groupby('dept')['bonus'].count())  # ignores NaN
# dept
# Eng    1
# HR     2

print(df3.groupby('dept')['bonus'].size())   # includes NaN rows
# dept
# Eng    2
# HR     2

GroupBy Sonuçlarını Sıralama

Varsayılan olarak GroupBy, sonucu grup anahtarına göre sıralar. İlk görünme sırasını korumak için sort=False ile sıralamayı devre dışı bırakabilirsiniz; bu, büyük veri kümelerinde biraz daha hızlıdır. Sonucu DataFrame olarak elde ettikten sonra herhangi bir sütunda sort_values() kullanarak daha ileri bir sıralama yapabilirsiniz.

result = (df.groupby('dept', sort=False)['salary']
            .mean()
            .reset_index()
            .sort_values('salary', ascending=False))
print(result)
#   dept    salary
# 0  Eng   91000.0
# 1   HR   61000.0

GroupBy'ı Diğer Yöntemlerle Zincirleme

GroupBy sonuçları normal Series veya DataFrame'lerdir; bu nedenle üzerlerinde ek Pandas yöntemlerini hemen zincirleyebilirsiniz. Yaygın bir örüntü, toplama yapmak, ardından reset_index() çağırmak, sonra sütunları yeniden adlandırmak ve sort_values() uygulamaktır. Tüm bunları ara değişkenler oluşturmadan, okunabilir tek bir yöntem zincirinde yapabilirsiniz.

summary = (
    df
    .groupby('dept')['salary']
    .agg(['mean', 'count'])
    .rename(columns={'mean': 'avg_salary', 'count': 'headcount'})
    .reset_index()
    .sort_values('avg_salary', ascending=False)
)
print(summary)

sum, mean ve count'u Birlikte Uygulama

Çoğu zaman grup başına birden fazla istatistiğe ihtiyaç duyarsınız. Birkaçını aynı anda hesaplamak için .agg() işlevine işlev adlarından oluşan bir liste verin. Sonuç, her işlev için bir sütun içeren bir DataFrame olur. Pandas bunların tümünü veriler üzerinde tek geçişte işlediği için bu yöntem, her toplamayı ayrı ayrı çağırmaktan daha verimlidir.

result = df.groupby('dept')['salary'].agg(['sum', 'mean', 'count', 'max'])
print(result)
#           sum      mean  count    max
# dept
# Eng    273000   91000.0      3  95000
# HR     122000   61000.0      2  62000

Kategorik Sütunlara Göre Gruplama

Bir gruplama sütunu Categorical veri türüne sahip olduğunda Pandas, hiç satırı olmayanlar da dahil olmak üzere tüm kategorileri varsayılan olarak sonuca ekler. Bu, özet tablonuzun her kategoriyi her zaman göstermesini sağlamak için yararlı olabilir; ancak boş gruplar için NaN veya 0 içeren satırlar oluşturur. Bunu observed parametresiyle denetleyebilirsiniz (boş kategorileri atlamak için True olarak ayarlayın).

df['dept'] = df['dept'].astype('category')
# With observed=True, only groups that appear in data are included
print(df.groupby('dept', observed=True)['salary'].mean())
# dept
# Eng    91000.0
# HR     61000.0

Hızlı Kontrol

Bu derste tek ve birden çok anahtarla GroupBy konusunu ne kadar anladığınızı test edin.

Ders Özeti

Bu derste şunları öğrendiniz: tek bir sütuna göre gruplama yapıp yaygın toplama yöntemlerini uygulamayı, boyutlar arası özetler oluşturmak için birden fazla sütuna göre gruplama yapmayı ve boş değerler bulunduğunda count() ile size() arasındaki farkı. Sırada, tek bir çağrıda birden fazla farklı istatistik hesaplamak için güçlü agg() yöntemini inceleyeceğiz.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Python öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
30
Dersler
120

Sıkça Sorulan Sorular

“Tek ve Birden Çok Anahtarla GroupBy” dersi ücretsiz mi?

Evet — “Tek ve Birden Çok Anahtarla GroupBy” 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.

“Tek ve Birden Çok Anahtarla GroupBy” dersinde ne öğreneceğim?

groupby() ile bir veya daha fazla sütuna göre gruplandırın ve sum, mean, count ile min/max toplulaştırmalarını uygulayı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.

“Tek ve Birden Çok Anahtarla GroupBy” 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. Böl-Aygula-Birleştir Deseni
  2. Tek ve Birden Çok Anahtarla GroupBy
  3. agg() Yöntemi
  4. GroupBy Dönüşümü ve Filtreleme
← Pandas & NumPy Academy Sayfasına Dön