Pandas 09 - Veri Gruplama Yöntemleri

Gruplama Yöntemleri

Veri Çerçevemizde aynı isme ya da aynı değere sahip birden fazla veri bilgisi olabilir. Verileri gruplayarak, grupların toplam değerleri, ortalama değerleri, grupta kaç adet veri bulunduğu, gruptaki verilerden en küçük ya da en büyük verinin hangisi olduğu gibi pek çok bilgi edinmek için, groupby() metodundan yararlanacağız.

groupby() Fonksiyonu

Veri çerçevemizdeki verileri gruplamak istediğimizde groupby() metodunu kullanabiliriz. Önce NBA oyuncularının bilgilerinin bulunduu .csv dosyamızı veri çerçevesine dönüştürüp içeriğine göz atalım.

import pandas as pd
nba = pd.read_csv("Veri_Setleri/nba.csv", decimal=".")
print(nba)
Name Team Number Position Age Height Weight College Salary
0 Avery Bradley Boston Celtics 0.0 PG 25.0 6-2 180.0 Texas 7730337.0
1 Jae Crowder Boston Celtics 99.0 SF 25.0 6-6 235.0 Marquette 6796117.0
2 John Holland Boston Celtics 30.0 SG 27.0 6-5 205.0 Boston University NaN
3 R.J. Hunter Boston Celtics 28.0 SG 22.0 6-5 185.0 Georgia State 1148640.0
4 Jonas Jerebko Boston Celtics 8.0 PF 29.0 6-10 231.0 NaN 5000000.0
... ... ... ... ... ... ... ... ... ...
453 Shelvin Mack Utah Jazz 8.0 PG 26.0 6-3 203.0 Butler 2433333.0
454 Raul Neto Utah Jazz 25.0 PG 24.0 6-1 179.0 NaN 900000.0
455 Tibor Pleiss Utah Jazz 21.0 C 26.0 7-3 256.0 NaN 2900000.0
456 Jeff Withey Utah Jazz 24.0 C 26.0 7-0 231.0 Kansas 947276.0
457 NaN NaN NaN NaN NaN NaN NaN NaN NaN

458 rows × 9 columns

Veri çerçevemizi incelediğimizde, Takım (Team) ismine göre grulama yapmanın uygun olacağını düşünüyorum. Takıma göre gruplama yaparak, Takımda bulunan Oyuncuların Ortalama, En az ya da En fazla Yaş (Age), Boy uzunluğu (Height), Kilo (Weight) ya da Yıllık Kazançlarını (Salary) görebiliriz.

Aşağıdaki örnekte, Takımlara göre tüm sütunların ortalama değerlerini göreceğiz. Ortalama değeri bulmak için mean() metodunu kullanacağız.

print(nba.groupby("Team").mean())
Team Number Age Weight Salary
Atlanta Hawks 19.000000 28.200000 221.266667 4.860197e+06
Boston Celtics 31.866667 24.733333 219.466667 4.181505e+06
Brooklyn Nets 18.266667 25.600000 215.600000 3.501898e+06
Charlotte Hornets 17.133333 26.133333 220.400000 5.222728e+06
Chicago Bulls 19.200000 27.400000 218.933333 5.785559e+06
Cleveland Cavaliers 14.466667 29.533333 227.866667 7.642049e+06
Dallas Mavericks 20.000000 29.733333 227.000000 4.746582e+06
Denver Nuggets 15.266667 25.733333 217.533333 4.294424e+06
Detroit Pistons 17.266667 26.200000 222.200000 4.477884e+06
Golden State Warriors 20.866667 27.666667 224.600000 5.924600e+06
Houston Rockets 14.666667 26.866667 220.333333 5.018868e+06
Indiana Pacers 18.933333 26.400000 222.266667 4.450122e+06
Los Angeles Clippers 19.533333 29.466667 219.733333 6.323643e+06
Los Angeles Lakers 16.066667 27.533333 227.066667 4.784695e+06
Memphis Grizzlies 15.555556 28.388889 218.000000 5.467920e+06
Miami Heat 10.466667 28.933333 218.400000 6.347359e+06
Milwaukee Bucks 20.000000 24.562500 224.062500 4.350220e+06
Minnesota Timberwolves 19.571429 26.357143 228.642857 4.593054e+06
New Orleans Pelicans 17.000000 26.894737 221.000000 4.355304e+06
New York Knicks 13.250000 27.000000 223.625000 4.581494e+06
Oklahoma City Thunder 14.000000 27.066667 229.400000 6.251020e+06
Orlando Magic 16.428571 25.071429 213.357143 4.297248e+06
Philadelphia 76ers 18.066667 24.600000 222.133333 2.213778e+06
Phoenix Suns 15.466667 25.866667 218.600000 4.229676e+06
Portland Trail Blazers 16.000000 25.066667 218.600000 3.220121e+06
Sacramento Kings 16.933333 26.800000 221.333333 4.778911e+06
San Antonio Spurs 17.933333 31.600000 223.933333 5.629516e+06
Toronto Raptors 22.466667 26.133333 221.800000 4.741174e+06
Utah Jazz 17.866667 24.466667 220.000000 4.204006e+06
Washington Wizards 17.600000 27.866667 219.000000 5.088576e+06

Takımlara göre tüm sütunların ortalama değerleri yerine sadece Ortalama Yaş bilgisini görmek isteseydik aşağıdaki kodu çalıştırmamız yeterli olacaktı.

print(nba.groupby("Team").mean()["Age"])
Team
Atlanta Hawks             28.200000
Boston Celtics            24.733333
Brooklyn Nets             25.600000
Charlotte Hornets         26.133333
Chicago Bulls             27.400000
Cleveland Cavaliers       29.533333
Dallas Mavericks          29.733333
Denver Nuggets            25.733333
Detroit Pistons           26.200000
Golden State Warriors     27.666667
Houston Rockets           26.866667
Indiana Pacers            26.400000
Los Angeles Clippers      29.466667
Los Angeles Lakers        27.533333
Memphis Grizzlies         28.388889
Miami Heat                28.933333
Milwaukee Bucks           24.562500
Minnesota Timberwolves    26.357143
New Orleans Pelicans      26.894737
New York Knicks           27.000000
Oklahoma City Thunder     27.066667
Orlando Magic             25.071429
Philadelphia 76ers        24.600000
Phoenix Suns              25.866667
Portland Trail Blazers    25.066667
Sacramento Kings          26.800000
San Antonio Spurs         31.600000
Toronto Raptors           26.133333
Utah Jazz                 24.466667
Washington Wizards        27.866667
Name: Age, dtype: float64

Takımlardaki en ağır (kilolu) Oyuncuları listelemek istersek , bu işlemi max() metodu ile gerçekleştirebiliriz. Amerika'da, Ülkemizde kullanılan SI Metrik Ölçü birimi yerine İngiliz Ölçü biriminden türemiş olan ABD geleneksel ölçü birimleri kullanıldığı için, tabloda gördüğünüz Boy uzunluğu (Height) ve Kilo (Weight) değerleri sizi şaşırtmış olabilir.

nba.dropna(axis=1)
print(nba.groupby("Team")["Weight"].max())
Team
Atlanta Hawks             260.0
Boston Celtics            260.0
Brooklyn Nets             275.0
Charlotte Hornets         289.0
Chicago Bulls             275.0
Cleveland Cavaliers       275.0
Dallas Mavericks          275.0
Denver Nuggets            280.0
Detroit Pistons           279.0
Golden State Warriors     273.0
Houston Rockets           265.0
Indiana Pacers            255.0
Los Angeles Clippers      265.0
Los Angeles Lakers        270.0
Memphis Grizzlies         270.0
Miami Heat                265.0
Milwaukee Bucks           265.0
Minnesota Timberwolves    307.0
New Orleans Pelicans      270.0
New York Knicks           278.0
Oklahoma City Thunder     255.0
Orlando Magic             260.0
Philadelphia 76ers        275.0
Phoenix Suns              260.0
Portland Trail Blazers    265.0
Sacramento Kings          270.0
San Antonio Spurs         290.0
Toronto Raptors           255.0
Utah Jazz                 265.0
Washington Wizards        250.0
Name: Weight, dtype: float64

Takımlardaki en genç Oyuncuları listelemek istersek , bu işlemi min() metodu ile gerçekleştirebiliriz.

print(nba.groupby("Team")["Age"].min())
Team
Atlanta Hawks             22.0
Boston Celtics            20.0
Brooklyn Nets             21.0
Charlotte Hornets         21.0
Chicago Bulls             21.0
Cleveland Cavaliers       24.0
Dallas Mavericks          22.0
Denver Nuggets            20.0
Detroit Pistons           20.0
Golden State Warriors     20.0
Houston Rockets           22.0
Indiana Pacers            20.0
Los Angeles Clippers      23.0
Los Angeles Lakers        20.0
Memphis Grizzlies         21.0
Miami Heat                20.0
Milwaukee Bucks           19.0
Minnesota Timberwolves    20.0
New Orleans Pelicans      23.0
New York Knicks           20.0
Oklahoma City Thunder     21.0
Orlando Magic             20.0
Philadelphia 76ers        20.0
Phoenix Suns              19.0
Portland Trail Blazers    20.0
Sacramento Kings          22.0
San Antonio Spurs         22.0
Toronto Raptors           20.0
Utah Jazz                 20.0
Washington Wizards        20.0
Name: Age, dtype: float64

Takımlardaki en genç Oyuncuları, Oyuncu yaşına göre küçükten büyüğe doğru listelemek/sıralamak istersek , bu işlemi sort() metodu ile gerçekleştirebiliriz.

print(nba.groupby("Team")["Age"].min().sort_values())
Team
Phoenix Suns              19.0
Milwaukee Bucks           19.0
Washington Wizards        20.0
Miami Heat                20.0
Utah Jazz                 20.0
Los Angeles Lakers        20.0
New York Knicks           20.0
Indiana Pacers            20.0
Golden State Warriors     20.0
Detroit Pistons           20.0
Orlando Magic             20.0
Philadelphia 76ers        20.0
Portland Trail Blazers    20.0
Toronto Raptors           20.0
Boston Celtics            20.0
Denver Nuggets            20.0
Minnesota Timberwolves    20.0
Oklahoma City Thunder     21.0
Memphis Grizzlies         21.0
Chicago Bulls             21.0
Charlotte Hornets         21.0
Brooklyn Nets             21.0
Houston Rockets           22.0
Dallas Mavericks          22.0
Sacramento Kings          22.0
San Antonio Spurs         22.0
Atlanta Hawks             22.0
Los Angeles Clippers      23.0
New Orleans Pelicans      23.0
Cleveland Cavaliers       24.0
Name: Age, dtype: float64

Veri Çerçevemizi Takım (Team) ismine göre gruplayarak, hangi sütunda kaç adet veri olduğunu bulmak istersek, count() metodundan yararlanabiliriz.

print(nba.groupby("Team").count())
Team Name Number Position Age Height Weight College Salary
Atlanta Hawks 15 15 15 15 15 15 11 15
Boston Celtics 15 15 15 15 15 15 13 14
Brooklyn Nets 15 15 15 15 15 15 13 15
Charlotte Hornets 15 15 15 15 15 15 13 15
Chicago Bulls 15 15 15 15 15 15 12 15
Cleveland Cavaliers 15 15 15 15 15 15 12 14
Dallas Mavericks 15 15 15 15 15 15 12 15
Denver Nuggets 15 15 15 15 15 15 9 14
Detroit Pistons 15 15 15 15 15 15 15 15
Golden State Warriors 15 15 15 15 15 15 12 15
Houston Rockets 15 15 15 15 15 15 11 15
Indiana Pacers 15 15 15 15 15 15 12 15
Los Angeles Clippers 15 15 15 15 15 15 14 15
Los Angeles Lakers 15 15 15 15 15 15 12 15
Memphis Grizzlies 18 18 18 18 18 18 17 14
Miami Heat 15 15 15 15 15 15 11 13
Milwaukee Bucks 16 16 16 16 16 16 14 16
Minnesota Timberwolves 14 14 14 14 14 14 9 13
New Orleans Pelicans 19 19 19 19 19 19 16 19
New York Knicks 16 16 16 16 16 16 11 16
Oklahoma City Thunder 15 15 15 15 15 15 14 15
Orlando Magic 14 14 14 14 14 14 10 14
Philadelphia 76ers 15 15 15 15 15 15 15 14
Phoenix Suns 15 15 15 15 15 15 13 15
Portland Trail Blazers 15 15 15 15 15 15 15 15
Sacramento Kings 15 15 15 15 15 15 13 15
San Antonio Spurs 15 15 15 15 15 15 11 15
Toronto Raptors 15 15 15 15 15 15 10 15
Utah Jazz 15 15 15 15 15 15 10 15
Washington Wizards 15 15 15 15 15 15 13 15

Veri Çerçevemizi Takım (Team) ismine göre gruplayarak, Yaş (Age) Sütununda hangi değerden kaç adet veri olduğunu bulmak istersek, value_counts() metodundan yararlanabiliriz.

print(nba.groupby("Team")["Age"].value_counts())
Team                Age 
Atlanta Hawks       24.0    4
                    31.0    3
                    27.0    2
                    35.0    2
                    22.0    1
                           ..
Washington Wizards  26.0    1
                    27.0    1
                    29.0    1
                    32.0    1
                    34.0    1
Name: Age, Length: 288, dtype: int64

← Önceki Bölüm | Sonraki Bölüm →