Garfield
YZF Admin
Pandas’ta satırları sütunlara çevirerek tablo düzenini değiştirmek için
Bu kodun üreteceği tablo mantıksal olarak şöyledir:
Bu nedenle satış verilerinde aynı ürün ve ay için birden fazla satış satırı bulunabileceğini düşünüyorsanız
Burada
Bu durumda sütun başlıkları çok seviyeli olur. İlk seviye hesaplama adını (
Ancak bu işlem, eksik kaydı sıfır satış gibi yorumlamanıza neden olabilir. Eksik değerlerin anlamı önemliyse önce bunun “kayıt yok”, “bilinmiyor” veya gerçekten “0” olup olmadığını belirleyin.
Satır indeksindeki
Böylece satır dizini olarak tutulan
Bu veri için
Beklenen değer
pivot() veya aynı işi toplulaştırma yaparak gerçekleştirmek için pivot_table() kullanılır. Verinizde aynı satır-sütun birleşimi yalnızca bir kez bulunuyorsa pivot(), aynı birleşimde birden fazla kayıt varsa ve bunları toplamak gerekiyorsa pivot_table() uygundur. Sonuç, satır ve sütun etiketleri yeniden düzenlenmiş bir DataFrame olur.Örnek veriyle pivot tablo oluşturma
Aşağıdaki varsayımsal veride her kayıt bir satış bilgisini gösterir.urun sütununu satır, ay sütununu sütun ve tutar sütununu değer alanı yapacağız.
Python:
import pandas as pd
df = pd.DataFrame({
"urun": ["Kalem", "Kalem", "Defter", "Defter"],
"ay": ["Ocak", "Şubat", "Ocak", "Şubat"],
"tutar": [120, 150, 300, 280]
})
sonuc = df.pivot(
index="urun",
columns="ay",
values="tutar"
)
print(sonuc)
Bu kodun üreteceği tablo mantıksal olarak şöyledir:
| urun | Ocak | Şubat |
|---|---|---|
| Kalem | 120 | 150 |
| Defter | 300 | 280 |
index="urun", satır başlıklarını; columns="ay", yeni sütunları; values="tutar" ise hücrelere yazılacak değerleri belirler. Orijinal tabloda her satış ayrı satırdayken, yeni tabloda her ürün tek satırda ve aylar ayrı sütunlarda yer alır.pivot() ile pivot_table() arasındaki fark
Yöntem seçimi, aynıurun ve ay birleşiminin veride kaç kez tekrarlandığına bağlıdır. Bu ayrım önemlidir; çünkü pivot() toplama yapmaz ve aynı hücreye birden fazla değer düşerse hata verir.| Yöntem | Ne zaman kullanılır? | Tekrarlanan kayıt durumunda |
|---|---|---|
| pivot() | Her satır-sütun birleşimi tek bir değere karşılık geliyorsa | Genellikle hata oluşur |
| pivot_table() | Aynı birleşimde birden fazla kayıt varsa | aggfunc ile toplama, ortalama veya başka bir toplulaştırma yapılır |
pivot_table() daha güvenli seçimdir. Örneğin tutarları ürün ve aya göre toplamak için:
Python:
sonuc = df.pivot_table(
index="urun",
columns="ay",
values="tutar",
aggfunc="sum",
fill_value=0
)
print(sonuc)
Burada
aggfunc="sum" aynı hücreye düşen tutarları toplar. fill_value=0 ise hiç kayıt bulunmayan hücrelerin boş kalması yerine 0 görünmesini sağlar. Boş hücrenin “veri yok” anlamını korumasını istiyorsanız fill_value kullanmayın; sıfır, kaydın gerçekten sıfır olduğu anlamına gelebilir.Birden fazla hesaplama yapmak
Aynı pivot tabloda toplam ve ortalama gibi birden fazla hesaplama da oluşturabilirsiniz:
Python:
sonuc = df.pivot_table(
index="urun",
columns="ay",
values="tutar",
aggfunc=["sum", "mean"],
fill_value=0
)
print(sonuc)
Bu durumda sütun başlıkları çok seviyeli olur. İlk seviye hesaplama adını (
sum, mean), ikinci seviye ise ay adını içerir. Tek seviyeli sütun adlarına ihtiyaç duyarsanız sonucu sonradan yeniden adlandırabilirsiniz; ancak hangi hesaplamanın hangi sütuna ait olduğunu kaybetmemek için adlandırmayı açık yapmanız gerekir.Eksik değerleri ve sütun adlarını düzenleme
Pivot işlemi sonrasında bazı ürünlerde bazı aylar bulunmayabilir. Bu durumda ilgili hücreNaN olur. Eksik hücreleri sıfırla doldurmayı seçerseniz:
Python:
sonuc = sonuc.fillna(0)
Ancak bu işlem, eksik kaydı sıfır satış gibi yorumlamanıza neden olabilir. Eksik değerlerin anlamı önemliyse önce bunun “kayıt yok”, “bilinmiyor” veya gerçekten “0” olup olmadığını belirleyin.
Satır indeksindeki
urun bilgisini yeniden DataFrame sütunu yapmak için reset_index() kullanabilirsiniz. Bu işlem, bir önceki çoklu toplulaştırma örneğinin çok seviyeli sütun başlıklarını kendiliğinden tek seviyeye indirmez:
Python:
sonuc = sonuc.reset_index()
print(sonuc)
Böylece satır dizini olarak tutulan
urun değeri normal bir sütun haline gelir. Bu biçim, sonucu CSV’ye aktarma veya başka bir tabloyla birleştirme aşamasında daha kullanışlıdır.Yaygın hata: aynı hücreye birden fazla kayıt düşmesi
Aşağıdaki örnekte aynı ürün ve ay birleşimi iki kez bulunur:
Python:
df = pd.DataFrame({
"urun": ["Kalem", "Kalem"],
"ay": ["Ocak", "Ocak"],
"tutar": [120, 80]
})
sonuc = df.pivot(
index="urun",
columns="ay",
values="tutar"
)
Bu veri için
pivot() kullanmak uygun değildir; çünkü Kalem-Ocak hücresine hem 120 hem de 80 yazılması gerekir. Toplam satış isteniyorsa şu biçimi kullanın:
Python:
sonuc = df.pivot_table(
index="urun",
columns="ay",
values="tutar",
aggfunc="sum"
)
print(sonuc)
Beklenen değer
200 olur. Bu sonuç, iki kaydın toplandığını gösterir; kayıtların ayrı ayrı korunması gerektiğini kanıtlamaz. Ayrıntılı satış satırlarını kaybetmemek istiyorsanız pivot tabloyu özet görünüm olarak kullanmalı, ham DataFrame’i ayrıca saklamalısınız.Uygun yöntemi seçme
Önce satırda hangi bilginin, sütunda hangi kategorinin ve hücrede hangi ölçümün bulunacağını belirleyin. Hücre başına tek kayıt düşüyorsapivot(), tekrarları toplamak veya ortalamak gerekiyorsa pivot_table() kullanın. Son olarak eksik hücrelerin anlamını kontrol edin, gerekiyorsa reset_index() ile sonucu normal sütunlara çevirin ve print(sonuc) ile beklenen satır-sütun düzenini doğrulayın.
Son düzenleme: