Veri Bilimi Okulu

SQL Sorgularının Python Pandas Dataframe Karşılıkları-2 (GROUP BY, ORDER BY)
SQL Sorgularının Python Pandas Dataframe Karşılıkları-2 (GROUP BY, ORDER BY)
sql_to_pandas_group_by_order_by

Loading

Merhabalar. Yaygın kullanılan SQL sorgularının Python pandas dataframe karşılıklarını bir örnek üzerinden paylaşmaya devam ediyoruz. Serimizin ilki olan bir önceki yazımızda SELECT ve WHERE cümlecikleri ile ilgili örnek yapmıştık. Bu yazıda kullanılacak veri kaynaklarına (sql ve pandas) ulaşmak için lütfen ilk yazıya müracaat ediniz.

1. GROUP BY

GROUP BY özellikle veri keşfinde çok sık kullanılan bir SQL cümleciğidir. GROUP BY ile verinin kategorilere göre nasıl dağıldığını ve hangi kategorinin ne kadar tekrarlandığını, ortalamasını, toplamını vb. bilgileri öğrenebiliriz.

select meslek, avg(aylik_gelir) as ortalama_gelir, avg(yas) as ortlama_yas
from simple_data
group by meslek
limit 5
meslekortalama_gelirortlama_yas
Doktor16125.0035.00
6750.0032.00
Memur4066.6636.00
Isci3500.0035.00
Tornacı4200.0043.00

Pandas ile

df.groupby(['meslek'])['aylik_gelir','yas'] \
.agg(['mean']) \
.reset_index() \
.head(5)
meslekaylik_geliryas
meanmean
0Berber9866.66666746.0
1Doktor16125.00000035.0
2Isci3500.00000035.0
3Memur4066.66666736.0
4Müzisyen10500.00000030.5

Arada fark var. Bunun iki sebebi var. SQL meslek sütunundaki boş değerleri de bir kategori olarak kabul ederken pandas bunu yapmadı. İkincisi pandas birşey belirtmememize rağmen mesleğe göre sıralama yaptı. SQL’de ise belirgin bir sıralama görünmüyor. Şimdi sıralama kriteri koyalım.

2. ORDER BY

select meslek, avg(aylik_gelir) as ortalama_gelir, avg(yas) as ortlama_yas
from simple_data
group by meslek
order by ortalama_gelir desc
limit 5
meslekortalama_gelirortlama_yas
Doktor1612535.0000000000000000
Müzisyen1050030.5000000000000000
Berber9866.66666666666646.0000000000000000
675032.0000000000000000
Pazarlamaci575029.0000000000000000

Pandas ile

df.groupby(['meslek'])['aylik_gelir','yas'] \
.agg(['mean']) \
.reset_index() \
.sort_values([('aylik_gelir','mean')], ascending=False) \
.head(5)
meslekaylik_geliryas
meanmean
1Doktor16125.00000035.0
4Müzisyen10500.00000030.5
0Berber9866.66666746.0
5Pazarlamaci5750.00000029.0
7Tuhafiyeci4800.00000047.0

Şimdi ikisi tarafından elde edilen sonuçlar birbirine yaklaştı. Farklılık yine NaN değerli mesleklerin pandas tarafından dikkate alınmasından kaynaklanıyor. Bir sonraki yazımızda UPDATE ve DELETE operasyonlarına örnekler vereceğiz. Hoşçakalın…

0

Bir yanıt yazın

Password Requirements:

  • At least 8 characters
  • At least 1 lowercase letter
  • At least 1 uppercase letter
  • At least 1 numerical number
  • At least 1 special character