November 30, 2021
Menghitung Data Berdasarkan Kelompok.

Group by Pandas DataFrame Untuk Perhitungan Data

Data yang tersedia pada umumnya memiliki kolom yang dapat dikelompokkan berdasarkan kategorinya. Pandas DataFrame menyediakan fungsi yang dapat digunakan untuk tujuan tersebut yaitu group by. Perintah ini serupa dengan perintah group by yang terdapat pada SQL. Misalkan, pada data terdapat nama kota maka kolomtersebut dapat dijadikan kategori untuk tampilan pengelompokkan data. Group by pada pandas dataframe dapat digabungkan dengan perintah lain untuk melakukan beberapa perhitungan. Perhitungan yang dapat dilakukan pada proses pengelompokkan data adalah mean, sum dan count.

Mean

Perintah mean digunakan untuk menghitung rata-rata dari keseluruhan data. Contoh perintah yang digunakan untuk mencari rata-rata seperti berikut ini.

df.groupby('Type 1').mean().head()
Tampilan data perintah mean

Sum

Perintah sum digunakan untuk menghitung jumlah dari keseluruhan nilai data. Contoh perintah yang digunakan untuk menghitung jumlah seperti berikut ini.

df.groupby('Type 1').sum().head()
Tampilan data perintah sum

Count

Perintah count digunakan untuk menghitung jumlah dari kemunculan data. Perbedaan dengan perintah sum adalah jika perintah sum digunakan untuk menjumlahkan nilai dari data sedangkan perintah count digunakan untuk menghitung jumlah kemunculan data. Contoh perintah yang digunakan untuk menghitung jumlah seperti berikut ini.

df.groupby(['Type 1']).count().head()
Tampilan data perintah count

Contoh Kode Program dengan Group By Pandas DataFrame

Pada bagian ini akan diberikan mengenai perintah perhitungan yang telah dijelaskan sebelumnya.

Memuat data ke Dataframe Pandas

In [1]:
import pandas as pd

df = pd.read_csv('https://raw.githubusercontent.com/Onestringlab/notebook/main/pokemon_data.csv')
df.head()
Out[1]:
# Name Type 1 Type 2 HP Attack Defense Sp. Atk Sp. Def Speed Generation Legendary
0 1 Bulbasaur Grass Poison 45 49 49 65 65 45 1 False
1 2 Ivysaur Grass Poison 60 62 63 80 80 60 1 False
2 3 Venusaur Grass Poison 80 82 83 100 100 80 1 False
3 3 VenusaurMega Venusaur Grass Poison 80 100 123 122 120 80 1 False
4 4 Charmander Fire NaN 39 52 43 60 50 65 1 False

Menampilkan semua rata-rata data yang dikelompokkan berdasarkan Type 1

In [2]:
df.groupby('Type 1').mean().head()
Out[2]:
# HP Attack Defense Sp. Atk Sp. Def Speed Generation Legendary
Type 1
Bug 334.492754 56.884058 70.971014 70.724638 53.869565 64.797101 61.681159 3.217391 0.000000
Dark 461.354839 66.806452 88.387097 70.225806 74.645161 69.516129 76.161290 4.032258 0.064516
Dragon 474.375000 83.312500 112.125000 86.375000 96.843750 88.843750 83.031250 3.875000 0.375000
Electric 363.500000 59.795455 69.090909 66.295455 90.022727 73.704545 84.500000 3.272727 0.090909
Fairy 449.529412 74.117647 61.529412 65.705882 78.529412 84.705882 48.588235 4.117647 0.058824
In [3]:
df.groupby('Type 1').mean().sort_values('Attack', ascending=False).head()
Out[3]:
# HP Attack Defense Sp. Atk Sp. Def Speed Generation Legendary
Type 1
Dragon 474.375000 83.312500 112.125000 86.375000 96.843750 88.843750 83.031250 3.875000 0.375000
Fighting 363.851852 69.851852 96.777778 65.925926 53.111111 64.703704 66.074074 3.370370 0.000000
Ground 356.281250 73.781250 95.750000 84.843750 56.468750 62.750000 63.906250 3.156250 0.125000
Rock 392.727273 65.363636 92.863636 100.795455 63.340909 75.477273 55.909091 3.454545 0.090909
Steel 442.851852 65.222222 92.703704 126.370370 67.518519 80.629630 55.259259 3.851852 0.148148

Menampilkan semua jumlah data yang dikelompokkan berdasarkan Type 1

In [4]:
df.groupby('Type 1').sum().head()
Out[4]:
# HP Attack Defense Sp. Atk Sp. Def Speed Generation Legendary
Type 1
Bug 23080 3925 4897 4880 3717 4471 4256 222 0
Dark 14302 2071 2740 2177 2314 2155 2361 125 2
Dragon 15180 2666 3588 2764 3099 2843 2657 124 12
Electric 15994 2631 3040 2917 3961 3243 3718 144 4
Fairy 7642 1260 1046 1117 1335 1440 826 70 1
In [5]:
df.groupby('Type 1').sum().sort_values('Attack', ascending=False).head()
Out[5]:
# HP Attack Defense Sp. Atk Sp. Def Speed Generation Legendary
Type 1
Water 33946 8071 8305 8170 8379 7898 7388 320 4
Normal 31279 7573 7200 5865 5470 6245 7012 299 2
Grass 24141 4709 5125 4956 5425 4930 4335 235 3
Bug 23080 3925 4897 4880 3717 4471 4256 222 0
Fire 17025 3635 4408 3524 4627 3755 3871 167 5

Menampilkan jumlah data yang dikelompokkan berdasarkan Type 1

In [6]:
df['Count'] = 1
df.head()
Out[6]:
# Name Type 1 Type 2 HP Attack Defense Sp. Atk Sp. Def Speed Generation Legendary Count
0 1 Bulbasaur Grass Poison 45 49 49 65 65 45 1 False 1
1 2 Ivysaur Grass Poison 60 62 63 80 80 60 1 False 1
2 3 Venusaur Grass Poison 80 82 83 100 100 80 1 False 1
3 3 VenusaurMega Venusaur Grass Poison 80 100 123 122 120 80 1 False 1
4 4 Charmander Fire NaN 39 52 43 60 50 65 1 False 1
In [7]:
df.groupby(['Type 1']).count()[['Count']]
Out[7]:
Count
Type 1
Bug 69
Dark 31
Dragon 32
Electric 44
Fairy 17
Fighting 27
Fire 52
Flying 4
Ghost 32
Grass 70
Ground 32
Ice 24
Normal 98
Poison 28
Psychic 57
Rock 44
Steel 27
Water 112
In [8]:
df.groupby(['Type 1', 'Type 2']).count()[['Count']]
Out[8]:
Count
Type 1 Type 2
Bug Electric 2
Fighting 2
Fire 2
Flying 14
Ghost 1
... ... ...
Water Ice 3
Poison 3
Psychic 5
Rock 4
Steel 1

136 rows × 1 columns

Kesimpulan Penggunaan Perintah Group By Pandas DataFrame

Perintah group by berfungsi serupa dengan perintah group by pada SQL. Selanjutnya, perintah ini dapat digabungkan dengan beberapa perintah lain untuk proses perhitungan yang diperlukan yaitu mean, sum dan count. Untuk artikel lain terkait dengan data science silahkan lihat kumpulan artikelnya disini.

Rajo Intan

Blogger, pemiliki Onestring Lab, menulis artikel terkait teknologi informasi dan pendidikan. Web Developer, berpengalaman lebih dari 20 tahun mengembangkan berbagai aplikasi dan sistem informasi. Kerjasama kontak di onestringlab@gmail.com atau https://forms.gle/xAGKkpi6B3BzJyzk7

View all posts by Rajo Intan →