Traffine I/O

Bahasa Indonesia

2022-11-12

Menggabungkan dan Mengelompokkan Data dengan Pandas

Pengantar

Pandas adalah pustaka Python yang fleksibel untuk manipulasi dan analisis data. Ini menyediakan struktur data seperti Series dan DataFrame, yang memudahkan Anda dalam bekerja dengan data terstruktur. Salah satu fitur paling berguna dari Pandas adalah kemampuannya untuk secara efisien menggabungkan dan mengelompokkan data, memungkinkan Anda untuk melakukan berbagai operasi pada data yang dikelompokkan. Artikel ini akan membimbing Anda dalam proses penggabungan dan pengelompokkan data dengan Pandas.

Objek GroupBy

Objek GroupBy di pandas memungkinkan Anda untuk dengan efisien mengelompokkan data berdasarkan satu atau lebih kolom, memungkinkan Anda untuk melakukan berbagai operasi pada data yang dikelompokkan. Bab ini akan membahas pembuatan objek GroupBy, pemilihan kolom dan baris, dan iterasi atas kelompok.

Membuat Objek GroupBy

Untuk membuat objek GroupBy, Anda pertama-tama memerlukan DataFrame dengan data yang akan dikelompokkan. Pada contoh ini, kita memiliki DataFrame dengan kolom Category dan Value:

python
import pandas as pd

data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
        'Value': [10, 20, 30, 40, 50, 60]}

df = pd.DataFrame(data)

Untuk membuat objek GroupBy, gunakan metode .groupby() pada DataFrame, yang memerlukan nama kolom yang ingin Anda kelompokkan:

python
grouped = df.groupby('Category')

Variabel grouped sekarang berisi objek GroupBy dengan data yang dikelompokkan berdasarkan kolom Category.

Pemilihan Kolom dan Baris

Setelah Anda membuat objek GroupBy, Anda dapat memilih grup tertentu dengan menggunakan metode .get_group(). Sebagai contoh, untuk memilih grup dengan kategori A, Anda dapat melakukan hal berikut:

python
grouped.get_group('A')
  Category  Value
0        A     10
2        A     30
4        A     50

Ini mengembalikan DataFrame yang berisi hanya baris dengan kategori A.

Iterasi atas Kelompok

Anda juga dapat melakukan iterasi atas kelompok-kelompok dalam objek GroupBy menggunakan for loop. Loop akan menghasilkan nama grup dan DataFrame grup yang sesuai:

python
for name, group in grouped:
    print(name)
    print(group)
A
  Category  Value
0        A     10
2        A     30
4        A     50

B
  Category  Value
1        B     20
3        B     40
5        B     60

Dalam contoh ini, loop mencetak nama grup (baik A atau B) dan DataFrame yang sesuai berisi baris dengan kategori itu. Ini dapat berguna untuk melakukan analisis lebih lanjut pada setiap grup secara terpisah atau menyimpan grup ke file individu.

Fungsi Agregat

Fungsi agregat memungkinkan Anda untuk melakukan perhitungan pada data yang dikelompokkan, seperti menemukan jumlah, rata-rata, atau jumlah nilai dalam setiap grup. Bab ini akan membahas fungsi agregat bawaan, membuat fungsi agregat kustom, dan menerapkan beberapa fungsi agregat sekaligus.

Fungsi Agregat Bawaan

Pandas menyediakan beberapa fungsi agregat bawaan yang dapat diterapkan langsung ke objek GroupBy. Beberapa fungsi agregat umum meliputi:

  • .sum(): menghitung jumlah nilai dalam setiap grup
  • .mean(): menghitung rata-rata (mean) nilai dalam setiap grup
  • .count(): menghitung jumlah nilai dalam setiap grup

Sebagai contoh, untuk menghitung jumlah kolom Value dalam setiap grup, Anda dapat menggunakan metode .sum():

python
grouped.sum()
          Value
Category
A            90
B           120

Ini mengembalikan DataFrame yang menunjukkan jumlah kolom Value untuk setiap kategori.

Fungsi Agregat Kustom

Jika fungsi agregat bawaan tidak memenuhi kebutuhan Anda, Anda dapat membuat fungsi agregat kustom Anda sendiri. Untuk melakukannya, tentukan fungsi yang mengambil Series atau DataFrame sebagai input dan mengembalikan satu nilai. Kemudian, terapkan fungsi agregat kustom ke objek GroupBy menggunakan metode .aggregate() atau .agg().

Sebagai contoh, misalkan Anda ingin menghitung jumlah nilai dibagi jumlah nilai untuk setiap grup. Anda dapat membuat fungsi agregat kustom sebagai berikut:

python
def custom_agg(x):
    return x.sum() / x.count()

grouped.aggregate(custom_agg)
          Value
Category
A            30
B            40

Ini mengembalikan DataFrame yang menunjukkan hasil dari menerapkan fungsi agregat kustom ke setiap grup.

Menerapkan Beberapa Fungsi Agregat

Anda dapat menerapkan beberapa fungsi agregat ke objek GroupBy sekaligus dengan memasukkan daftar fungsi ke metode .agg(). Hasilnya akan berupa DataFrame dengan struktur kolom hierarkis, di mana level atas mewakili nama kolom asli dan level yang lebih rendah mewakili fungsi agregat yang diterapkan.

Sebagai contoh, untuk menghitung jumlah, rata-rata, dan jumlah nilai kolom Value untuk setiap grup, lakukan hal berikut:

python
grouped.agg(['sum', 'mean', 'count'])
          Value
            sum mean count
Category
A            90   30     3
B           120   40     3

Ini mengembalikan DataFrame dengan hasil dari menerapkan fungsi agregat yang ditentukan ke setiap grup.

Tabel Pivot

Tabel pivot menyediakan cara untuk merangkum data dengan merombak dan menggabungkan data berdasarkan kolom tertentu yang ditentukan. Bab ini akan membahas pembuatan tabel pivot, menyesuaikan nilai tabel pivot, dan menangani data yang hilang.

Membuat Tabel Pivot

Untuk membuat tabel pivot, gunakan fungsi pd.pivot_table(). Fungsi ini memerlukan beberapa argumen, termasuk:

  • data: DataFrame yang ingin Anda pivot
  • values: kolom yang berisi data yang ingin Anda agregat
  • index: kolom yang ingin Anda gunakan sebagai label baris di tabel pivot
  • columns: (opsional) kolom yang ingin Anda gunakan sebagai label kolom di tabel pivot
  • aggfunc: fungsi agregat yang ingin Anda terapkan pada data

Sebagai contoh, untuk membuat tabel pivot yang menunjukkan jumlah kolom Value untuk setiap kategori, Anda dapat melakukan hal berikut:

python
pivot = pd.pivot_table(df, values='Value', index='Category', aggfunc='sum')
          Value
Category
A            90
B           120

Ini mengembalikan DataFrame dengan tabel pivot yang menunjukkan jumlah kolom Value untuk setiap kategori.

Menyesuaikan Nilai Tabel Pivot

Anda dapat menyesuaikan nilai dalam tabel pivot dengan menentukan fungsi agregat yang berbeda, atau dengan memasukkan beberapa kolom atau fungsi. Untuk melakukannya, berikan daftar nama kolom atau fungsi ke argumen values, index, columns, atau aggfunc.

Sebagai contoh, untuk membuat tabel pivot yang menunjukkan baik jumlah maupun rata-rata kolom Value untuk setiap kategori, Anda dapat melakukan hal berikut:

python
pd.pivot_table(df, values='Value', index='Category', aggfunc=['sum', 'mean'])
          sum mean
        Value Value
Category
A          90    30
B         120    40

Ini mengembalikan DataFrame dengan struktur kolom hierarkis, di mana level atas mewakili fungsi agregat yang diterapkan dan level yang lebih rendah mewakili nama kolom asli.

Menangani Data yang Hilang

Tabel pivot kadang-kadang menghasilkan sel dengan data yang hilang, terutama saat bekerja dengan data kategorikal. Untuk menangani data yang hilang dalam tabel pivot, Anda dapat menggunakan argumen fill_value untuk menentukan nilai default yang akan menggantikan data yang hilang.

Sebagai contoh, misalkan Anda memiliki DataFrame dengan kategori tambahan C, tetapi tanpa nilai yang sesuai:

python
data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B', 'C'],
        'Value': [10, 20, 30, 40, 50, 60, None]}

df = pd.DataFrame(data)

Secara default, tabel pivot akan menunjukkan nilai NaN untuk data yang hilang:

python
pd.pivot_table(df, values='Value', index='Category', aggfunc='sum')
          Value
Category
A           90.0
B          120.0
C            NaN

Untuk mengganti nilai NaN dengan nilai default, seperti 0, gunakan argumen fill_value:

python
pd.pivot_table(df, values='Value', index='Category', aggfunc='sum', fill_value=0)
          Value
Category
A            90
B           120
C             0

Ini mengembalikan DataFrame dengan tabel pivot yang menunjukkan jumlah kolom Value untuk setiap kategori, dengan data yang hilang diganti oleh nilai default yang ditentukan.

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!