• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

Pandas groupby ile gruplara göre hesaplama nasıl yapılır?

Garfield

Yönetici
YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
488
Mesajlar
501
AI Seviyesi
Yeni

Gruplama için temel yöntem: groupby ve agg​


pandas içinde gruplara göre hesaplama yapmak için önce groupby() ile hangi sütuna göre gruplanacağını belirtin, ardından sum(), mean(), count() veya agg() gibi bir toplulaştırma yöntemi uygulayın. Böylece her grup için ayrı toplam, ortalama, adet veya birden fazla hesaplama elde edebilirsiniz. Aşağıdaki örnekte satışları departmana göre gruplayıp toplam ciroyu, ortalama birim fiyatını ve işlem sayısını çıkaracağız.

Ön koşul olarak pandas kurulu olmalı ve veriniz bir DataFrame içinde bulunmalıdır. Örnek veri varsayımsaldır:

Python:
import pandas as pd

veri = pd.DataFrame({
    "departman": ["Teknoloji", "Teknoloji", "Ofis", "Ofis", "Teknoloji"],
    "urun": ["Klavye", "Fare", "Defter", "Kalem", "Monitör"],
    "adet": [3, 5, 10, 20, 2],
    "birim_fiyat": [800, 400, 75, 25, 6000]
})

veri["ciro"] = veri["adet"] * veri["birim_fiyat"]

sonuc = (
    veri.groupby("departman", as_index=False)
        .agg(
            toplam_ciro=("ciro", "sum"),
            ortalama_birim_fiyat=("birim_fiyat", "mean"),
            islem_sayisi=("urun", "count")
        )
)

print(sonuc)

Bu hesaplamada groupby("departman") aynı departmandaki satırları bir araya getirir. agg() içindeki her ifade, çıktıdaki sütun adını, kaynak sütunu ve uygulanacak hesaplamayı belirtir. Sonuç yaklaşık olarak şöyledir:

Kod:
  departman  toplam_ciro  ortalama_birim_fiyat  islem_sayisi
0       Ofis         1250                  50.0             2
1  Teknoloji        16400                2400.0             3

Buradaki toplam_ciro, o departmandaki tüm satırların cirosunun toplamıdır. islem_sayisi ürün adlarının sayısını gösterir; eksik değerleri saymak istiyorsanız count() yerine sütunun niteliğine göre size kullanmanız gerekebilir.

Tek veya birden fazla hesaplama uygulama​


Tek bir hesaplama yapacaksanız daha kısa yöntemler kullanılabilir:

Python:
departman_toplamlari = veri.groupby("departman")["ciro"].sum()
ortalama_fiyatlar = veri.groupby("departman")["birim_fiyat"].mean()
satir_sayilari = veri.groupby("departman").size()

Bu kullanımda sonuçların grup adı çoğunlukla dizin olarak gelir. Grup adını normal sütun olarak almak isterseniz .reset_index() ekleyebilir veya baştan as_index=False kullanabilirsiniz:

Python:
sonuc = (
    veri.groupby("departman", as_index=False)["ciro"]
        .sum()
        .rename(columns={"ciro": "toplam_ciro"})
)

Birden fazla sütunla gruplama da mümkündür. Örneğin satışları hem departmana hem de ürüne göre hesaplamak için groupby(["departman", "urun"]) kullanılır. Her iki sütunun birleşimi ayrı bir grup kabul edilir.

agg, transform ve apply arasındaki fark​


Hangi yöntemi seçeceğiniz, hesaplama sonucunun satır sayısını nasıl etkilemesini istediğinize bağlıdır.
YöntemSonuç biçimiUygun kullanım
aggHer grup için genellikle tek satırToplam, ortalama, en büyük veya en küçük değer
transformİlk veriyle aynı satır sayısıGrup toplamını veya ortalamasını her satıra ekleme
applyÖzel kurala bağlıStandart toplulaştırmaların yetmediği işlemler
Örneğin her satış satırının yanına kendi departmanının toplam cirosunu eklemek için transform() kullanın. agg() burada uygun değildir; çünkü agg() grupları tek satıra indirgerken transform() özgün satır yapısını korur.

Python:
veri["departman_toplam_cirosu"] = (
    veri.groupby("departman")["ciro"].transform("sum")
)

print(veri[["departman", "urun", "ciro", "departman_toplam_cirosu"]])

Örneğin Teknoloji grubundaki üç satırın her birinde departman_toplam_cirosu değeri 16400 görünür. Bu, her satırın cirosunun 16.400 olduğu anlamına gelmez; yalnızca satırın ait olduğu grubun toplamını gösterir.

Grupları hesaplama sonucuna göre seçme​


Önce grup bazında hesaplama yapıp ardından belirli bir koşulu sağlayan grupları seçebilirsiniz. Örneğin toplam cirosu 10.000’den fazla olan departmanları bulmak için:
  1. Veriyi hesaplanabilir hâle getirin. Ciro gibi bir değer kullanacaksanız ilgili sütunun sayısal olduğundan ve gerekiyorsa adet ile birim fiyatın çarpımından oluşturulduğundan emin olun.
  2. Grupları oluşturun ve toplulaştırın. groupby("departman", as_index=False) ile departmanları gruplayıp agg() içinde toplam ciroyu hesaplayın.
  3. Koşula uyan grupları filtreleyin. Hesaplama tamamlandıktan sonra sonuc[sonuc["toplam_ciro"] > 10000] ifadesini kullanın; bu işlem yalnızca grup sonuçlarını döndürür.
  4. Sonucu kontrol edin. Dönen satırların grup bazında tekilleştiğini ve koşul sütununun gerçekten hesaplanan değer olduğunu kontrol edin. Hiç satır dönmemesi, hesaplamanın bozuk olduğunu değil, koşulu sağlayan grup bulunmadığını gösterir.
Python:
grup_sonucu = (
    veri.groupby("departman", as_index=False)
        .agg(toplam_ciro=("ciro", "sum"))
)

buyuk_departmanlar = grup_sonucu[
    grup_sonucu["toplam_ciro"] > 10000
]

print(buyuk_departmanlar)

Eksik değerler varsa kullanılan hesaplama sonucu değişebilir. mean() varsayılan olarak eksik sayısal değerleri dışarıda bırakır; count() seçilen sütundaki eksik olmayan değerleri, size() ise gruptaki tüm satırları sayar. Bu ayrım resmî pandas istatistik dersinde açıklanır. Gruplama anahtarındaki eksik değerler ise ayrı bir konudur: varsayılan dropna=True bunları grup sonucundan çıkarır; dahil etmek için dropna=False kullanın. Parametre ayrıntıları resmî groupby belgesindedir. Bu nedenle beklenmeyen sonuçta önce isna().sum() ile ilgili sütunlardaki eksik değerleri, ardından sütun türlerini dtypes ile kontrol edin. Metin olarak tutulan sayısal değerler hesaplamadan önce uygun biçimde sayısala dönüştürülmelidir.
 

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Geri
Üst