Menguasai Agregasi dan Pivot Data dengan Pandas

Agregasi dan Pivot data pandas

Pandas adalah pustaka python yang sangat ‘powerful’ dan banyak digunakan dalam analisis data. Salah satu fitur pandas adalah kemampuannya untuk melakukan agregasi data sintaks yang relatif sederhana, cepat dan efisien. Dengan pandas, kita dapat dengan mudah menghitung berbagai ringkasan statistik, mengelompokkan data berdasarkan kriteria tertentu, dan menghitung berbagai jenis agregasi seperti jumlah, rata-rata, atau median dari kelompok data. Selain itu, pandas juga memiliki fitur untuk melakukan operasi pivot, yang memungkinkan kita mengubah struktur data dari format long menjadi wide atau dalam format tabulasi yang lebih mudah dibaca.

Pada tutorial ini akan dibahas secara lengkap bagaimana kita dapat melakukan agregasi serta pivot data, mulai dari yang sederhana hingga yang lebih kompleks.

Let’s start!

Penyiapan Data

Data dapat diunduh pada tautan berikut: fake_sales.csv.

Secara garis besar dataset berisi informasi penjualan 360 toko dari suatu perusahaan retail yang beroperasi di 3 Kota A, B dan C. Informasi kota dapat dilihat pada huruf pertama kolom store_id yang mengindikasikan kota dari toko tersebut. Berikut penjelasan masing-masing kolom pada dataset:

  • store_id berisi identitas dari setiap toko (karakter pertama A, B atau C menunjukkan lokasi kota dari toko tersebut)
  • store_type berisi informasi tipe dari toko apakah Big, Medium atau Small
  • num_trans menunjukkan jumlah transaksi yang dilakukan di toko tersebut pada periode tertentu (anggap saja bulan tertentu)
  • amt_trans menunjukkan nilai transaksi yang dilakukan ditoko tersebut pada periode tertentu (anggap saja bulan tertentu dan dalam ribu rupiah).

Python

import pandas as pd

data = pd.read_csv("fake_sales.csv")

print(data)
# OUTPUT

    store_id store_type  num_trans  amt_trans
0       A001      Small        715    85640.0
1       A002        Big       1904   147113.0
2       A003      Small        598    80772.0
3       A004      Small        671    43584.0
4       A005        Big       1971   226017.0
..       ...        ...        ...        ...
355     C096      Small        977   132278.0
356     C097        Big       1636   253769.0
357     C098      Small        574   104658.0
358     C099      Small        937    99624.0
359     C100     Medium        986   137523.0

[360 rows x 4 columns]

Untuk melengkapi informasi pada dataset, kita perlu menambah 1 kolom baru yaitu city dan berisi nama kota dengan mengambil karakter pertama kolom store_id. Kolom city nantinya akan sangat penting untuk tutorial ini, karena sebagian besar agregasi yang kita lakukan akan menggunakan kolom ini.

Python

# menyisipkan kolom `city` 
data.insert(0, "city", data["store_id"].str[0])

print(data)
# OUTPUT

    city store_id store_type  num_trans  amt_trans
0      A     A001      Small        715    85640.0
1      A     A002        Big       1904   147113.0
2      A     A003      Small        598    80772.0
3      A     A004      Small        671    43584.0
4      A     A005        Big       1971   226017.0
..   ...      ...        ...        ...        ...
355    C     C096      Small        977   132278.0
356    C     C097        Big       1636   253769.0
357    C     C098      Small        574   104658.0
358    C     C099      Small        937    99624.0
359    C     C100     Medium        986   137523.0

[360 rows x 5 columns]

Setelah siap, mari kita mulai mengeksplorasi berbagai bentuk agregasi dan pivot dari dataset ini!

Agregasi Total (Tanpa pengelompokan)

Kita dapat melakukan agregasi secara total pada seluruh data dan menghasilkan nilai tunggal. Pustaka pandas menyediakan banyak metode yang dapat digunakan meliputi sum, mean, min, max, median, std, var, count dan lain sebagainya. Misalkan fungsi sum dapat digunakan untuk menjumlahkan seluruh nilai pada baris atau kolom pandas dataframe atau series. Metode lainnya yaitu mean untuk mendapatkan nilai rata-rata, min mendapatkan nilai minimum, max mendapatkan nilai maksimum, med untuk mendapatkan nilai median, dan seterusnya.

Berikut beberapa contoh penggunaan metode-metode tersebut:

Python

# Jumlah transaksi dan nilai
total_num = data["num_trans"].sum()
total_amt = data["amt_trans"].sum()

print(f"Jumlah transaksi: {total_num}")
print(f"Total nilai transaksi: {total_amt}")

# Rata-rata transaksi dan nilai
total_num = data["num_trans"].mean()
total_amt = data["amt_trans"].mean()

print(f"Rata-rata jumlah transaksi per toko: {total_num:.0f}")
print(f"Rata-rata nilai transaksi per toko: {total_amt:.2f}")

# total observasi (menurut `store_id`)
total_store = data["store_id"].count()
print(f"Jumlah toko: {total_store}")

# agregasi `mean` untuk beberapa kolom sekaligus
averages = data[["num_trans", "amt_trans"]].mean()
print("\nRata-rata menurut kolom:")
print(averages)
# OUTPUT

Jumlah transaksi: 389925
Total nilai transaksi: 37613193.0
Rata-rata jumlah transaksi per toko: 1083
Rata-rata nilai transaksi per toko: 104481.09
Jumlah toko: 360

Rata-rata menurut kolom:
num_trans      1083.125000
amt_trans    104481.091667
dtype: float64

Berdasarkan hasil agregasi di atas, dapat dilihat berapa banyak unit toko secara keseluruhan. Selain itu diperoleh pula jumlah total transaksi dan total nilai transaksi dari seluruh toko, serta rata-rata jumlah transaksi dan rata-rata nilai transaksi dari seluruh toko.

Agregasi Menurut 1 Kelompok (Satu fungsi per kolom)

Untuk menghasilkan agregasi data menurut kelompok tertentu, kita dapat menggunakan metode groupby. Metode groupby berfungsi untuk menentukan kolom mana yang akan menjadi dasar pengelompokan. Umumnya metode ini diikuti dengan metode agg yang berisi informasi kolom mana saja serta fungsiapa yang digunakan dalam agregasi data.

Contoh 1. Jumlah transaksi menurut city

Pada contoh berikut ini, kita melakukan agregasi data sehingga menghasilkan data jumlah transaksi (num_trans) yang dikelompokkan menurut kolom city. Sebagai catatan, saat melakukan agregasi maka kolom yang dijadikan kelompok (yang terdapat pada metode groupby akan menjadi indeks baris pada hasil agregasi.

Agregasi yang dilakukan akan menghasilkan dataframe baru dengan 1 kolom yaitu num_trans sementara city merupakan indeks baris dari dataframe tersebut.

Python

# jumlah transaksi menurut `city`
num_by_city = data.groupby("city").agg({"num_trans": "sum"})

print(num_by_city)
# OUTPUT

      num_trans
city           
A        135621
B        154866
C         99438

Jika diperlukan, kita dapat menjadikan city sebagai kolom baru dan mengganti indeks barisnya dengan nilai default yaitu 0, 1, dst yaitu dengan memanggil metode reset_index() pada hasil agregasi.

Python

tot_by_city = data.groupby("city").agg({"num_trans": "sum"}).reset_index()

print(tot_by_city)
# OUTPUT

  city  num_trans
0    A     135621
1    B     154866
2    C      99438
Contoh 2. Jumlah toko dan rata-rata transaksi menurut city

Pada contoh ini, kita melakukan agregasi yang ‘sedikit’ lebih kompleks dari sebelumnya. Agregasi yang dilakukan adalah menghitung banyaknya toko menurut kota serta rata-rata jumlah transaksi dan rata-rata nilai transaksi per toko menurut kota.

Dari hasil berikut, diperoleh bahwa jumlah toko di Kota A sebanyak 120, B sebanyak 140 dan C sebanyak 100 toko. Adapun secara rata-rata jumlah transaksi di Kota A adalah 1130 transaksi, B dan C masing-masing 1106 transaksi dan 994 transaksi. Begitu pula untuk rata-rata nilai transaksi pada setiap kota yaitu 115.435,5; 86.832,5 dan 116.043.

Python

avg_by_city = data.groupby("city").agg({"store_id" : "count",
                                        "num_trans": "mean",
                                        "amt_trans": "mean"})

print(avg_by_city)
# OUTPUT

      store_id    num_trans      amt_trans
city                                      
A          120  1130.175000  115435.508333
B          140  1106.185714   86832.485714
C          100   994.380000  116043.840000
Contoh 3. Jumlah toko dan rata-rata transaksi menurut store_type

Contoh ini mirip dengan contoh sebelumnya, hanya saja kita mengelompokkannya menurut kolom store_type.

Python

avg_by_type = data.groupby("store_type").agg({"store_id" : "count",
                                              "num_trans": "mean",
                                              "amt_trans": "mean"})

print(avg_by_type)
# OUTPUT

            store_id    num_trans      amt_trans
store_type                                      
Big              116  1472.370690  142530.836207
Medium           109  1027.559633   99565.128440
Small            135   793.525926   75755.681481
Contoh 4. Agregasi dan pengurutan

Setelah melakukan proses agregasi, kita juga dapat mengurutkan hasilnya berdasarkan nilai pada kolom tertentu baik secara ascending (default) maupun descending. Mari kita ulangi agregasi seperti pada contoh 2 dengan mengurutkan hasilnya berdasarkan rata-rata nilai transaksi secara descending (dari nilai terbesar sampai terkecil).

Python

# mengurutkan hasil agregasi berdasarkan kolom `amt_trans`
avg_by_city = data.groupby("city") \
                  .agg({"store_id": "count",
                        "num_trans":"mean", 
                        "amt_trans": "mean"}) \
                  .sort_values("amt_trans", ascending=False)

print(avg_by_city)
# OUTPUT

      store_id    num_trans      amt_trans
city                                      
C          100   994.380000  116043.840000
A          120  1130.175000  115435.508333
B          140  1106.185714   86832.485714

Agregasi Menurut 1 Kelompok (Beberapa fungsi per kolom)

Pada bagian sebelumnya, setiap kolom yang di-agregasi hanya menggunakan satu fungsi agregasi saja, misal count, sum atau mean. Pustaka pandas menyediakan fitur yang memungkinkan kita untuk menggunakan beberapa fungsi sekaligus pada setiap kolom yang diagregasi.

Contoh 5. Agregasi kolom amt_trans menurut city (count, sum, mean, min, max)

Berdasarkan hasil agregasi berikut ini, kita menghasilkan banyak informasi pada kolom amt_trans. Meliputi jumlah toko, total nilai transaksi, rata-rata nilai transaksi, nilai minimum dan maksimum transaksi untuk masing-masing Kota A, B dan C.

Python

summary_by_city = data.groupby("city") \
                      .agg({"amt_trans": ["count", "sum", "mean", "min", "max"]})


print(summary_by_city)
# OUTPUT

     amt_trans                                              
         count         sum           mean      min       max
city                                                        
A          120  13852261.0  115435.508333  36740.0  291533.0
B          140  12156548.0   86832.485714  17700.0  179215.0
C          100  11604384.0  116043.840000  23193.0  329497.0

Pada contoh di atas, karena agregasi kolom menggunakan beberapa fungsi maka pandas secara otomatis menjadikan kolom-kolom berupa multi-index. Hal ini berarti setiap kolom diidentifikasikan dengan lebih dari 1 indeks. Sebagai contoh, untuk mengakses kolom sum kita tidak dapat langsung menggunakan sum melainkan (amt_trans, sum). Untuk lebih jelasnya kita dapat mengakses properti columns pada objek summary_by_city. Adapun untuk mengurutkan data berdasarkan kolom tertentu, maka kita harus menggunakan indeks kolom tersebut secara lengkap.

Python

# menampilkan daftar kolom pada hasil agregasi
print(summary_by_city.columns)

print(f"\n{'':-^60}\n")   # mencetak '-' sebanyak 60x

# misal akan diurutkan berdasarkan (`amt_trans`, `mean`)
sort_idx = ('amt_trans',  'mean')

summary_by_city = summary_by_city.sort_values(sort_idx, ascending=False)

print(summary_by_city)
# OUTPUT

MultiIndex([('amt_trans', 'count'),
            ('amt_trans',   'sum'),
            ('amt_trans',  'mean'),
            ('amt_trans',   'min'),
            ('amt_trans',   'max')],
           )

------------------------------------------------------------

     amt_trans                                              
         count         sum           mean      min       max
city                                                        
C          100  11604384.0  116043.840000  23193.0  329497.0
A          120  13852261.0  115435.508333  36740.0  291533.0
B          140  12156548.0   86832.485714  17700.0  179215.0
Contoh 6. Agregasi kolom num_trans, amt_trans menurut store_type (count, sum, mean)

Contoh di bawah ini menunjukkan agregasi yang melibatkan 3 kolom dimana masing-masing kolom juga diagregasi dengan beberapa fungsi. Fungsi count digunakan untuk mendapatkan jumlah toko menurut store_type (menggunakan kolom store_id). Adapun untuk kolom num_trans dan amt_trans masing-masing menampilkan hasil agregasi menggunakan fungsi sum dan mean.

Python

summary_by_type = data.groupby("store_type") \
                      .agg({"store_id" : "count",
                            "num_trans": ["sum","mean"],
                            "amt_trans": ["sum","mean"]})

print(summary_by_type.columns)

print(f"\n{'':-^70}\n")

print(summary_by_type)
# OUTPUT

MultiIndex([( 'store_id', 'count'),
            ('num_trans',   'sum'),
            ('num_trans',  'mean'),
            ('amt_trans',   'sum'),
            ('amt_trans',  'mean')],
           )

----------------------------------------------------------------------

           store_id num_trans                amt_trans               
              count       sum         mean         sum           mean
store_type                                                           
Big             116    170795  1472.370690  16533577.0  142530.836207
Medium          109    112004  1027.559633  10852599.0   99565.128440
Small           135    107126   793.525926  10227017.0   75755.681481
Contoh 7. Mengganti nama-nama kolom Multiindex menjadi flat

Berdasarkan kode pada Contoh 6 hasil agregasi akan menghasilkan kolom dengan multi indeks. Jika memang diperlukan, kita dapat merubah nama-nama kolom tersebut menjadi flat sesuai nama yang diinginkan. Caranya cukup dengan memperbarui nilai properti columns pada objek summary_by_type yang diperoleh sebelumnya dengan nama baru.

Python

summary_by_type.columns = ["num_stores", "tot_trans", "avg_trans", 
                           "tot_amt", "avg_amt"]

print(summary_by_type)
# OUTPUT

            num_stores  tot_trans    avg_trans     tot_amt        avg_amt
store_type                                                               
Big                116     170795  1472.370690  16533577.0  142530.836207
Medium             109     112004  1027.559633  10852599.0   99565.128440
Small              135     107126   793.525926  10227017.0   75755.681481

Agregasi Menurut 2 Kelompok atau Lebih

Dalam melakukan agregasi menggunakan pandas kita dapat mengelompokkan tidak hanya berdasarkan satu kelompok saja, namun dengan dua atau lebih kelompok. Misalkan, pada kode berikut kita akan menghitung banyaknya toko, jumlah transaksi dan total nilai transaksi menurut kota dan tipe toko.

Contoh 8. Agregasi menurut city dan store_type

Agregasi menurut kode berikut ini menghasilkan informasi yang dikelompokkan berdasarkan city serta store_type. Dari sini kita dapat mengetahui berapa jumlah toko yang ada pada masing-masing kota berdasarkan tipe tokonya. Bagitu pula informasi lainnya yaitu banyaknya transaksi dan nilai transaksi menurut kota dan jenis toko.

Sama seperti bagian-bagian sebelumnya, jika diperlukan kita dapat pula melakukanpengurutan maupun merubah nama kolom pada data hasil agregasi.

Python

tot_by_city_by_type = data.groupby(["city", "store_type"]) \
                          .agg({"store_id" : "count",
                                "num_trans": "sum", 
                                "amt_trans": "sum"}) 

print(tot_by_city_by_type)
# OUTPUT

                 store_id  num_trans  amt_trans
city store_type                                
A    Big               39      61693  6453130.0
     Medium            40      43534  4235584.0
     Small             41      30394  3163547.0
B    Big               45      66430  5109216.0
     Medium            41      42724  3427054.0
     Small             54      45712  3620278.0
C    Big               32      42672  4971231.0
     Medium            28      25746  3189961.0
     Small             40      31020  3443192.0
Contoh 9. Agregasi menurut city dan store_type (dengan beberapa fungsi)

Pada contoh ini, kita melakukan agregasi dengan 2 kelompok yaitu city dan store_type serta pada kolom num_trans dan amt_trans di-agregasi menggunakan 2 fungsi. Selain itu kita menambahkan metode reset_index() sehingga (city, store_type) yang sebelumnya merupakan indeks baris dari hasil agregasi menjadi 2 kolom biasa.

Python

summary_by_city_by_type = data.groupby(["city", "store_type"]) \
                          .agg({"store_id" : "count",
                                "num_trans": ["sum", "mean"], 
                                "amt_trans": ["sum", "mean"]}) \
                          .reset_index()

colnames = ["city", "store_type", "num_stores",
            "tot_trans", "avg_trans", "tot_amt", "avg_amt"]

# merubah nama-nama kolom
summary_by_city_by_type.columns = colnames

print(summary_by_city_by_type)
# OUTPUT

  city store_type  num_stores  tot_trans    avg_trans    tot_amt        avg_amt
0    A        Big          39      61693  1581.871795  6453130.0  165464.871795 
1    A     Medium          40      43534  1088.350000  4235584.0  105889.600000 
2    A      Small          41      30394   741.317073  3163547.0   77159.682927 
3    B        Big          45      66430  1476.222222  5109216.0  113538.133333
4    B     Medium          41      42724  1042.048780  3427054.0   83586.682927
5    B      Small          54      45712   846.518519  3620278.0   67042.185185
6    C        Big          32      42672  1333.500000  4971231.0  155350.968750 
7    C     Medium          28      25746   919.500000  3189961.0  113927.178571
8    C      Small          40      31020   775.500000  3443192.0   86079.800000 

Agregasi dengan Fungsi Buatan

Selain menggunakan fungsi-fungsi standar yang tersedia, jika diperlukan maka proses agregasi dapat juga menggunakan fungsi yang kita definisikan sendiri.

Contoh 10. Agregasi (rata-rata) dengan pembulatan angka desimal

Pada contoh berikut misalkan kita membuat fungsi untuk menghitung rata-rata dimana hasilnya dibulatkan pada nilai desimal tertentu. Nilai defaultnya adalah 0 atau dibulatkan ke bilangan bulat, namun parameter ini dapat diatur dengan nilai lainnya.

Misalkan untuk kolom num_trans kita ingin membulatkan tanpa nilai desimal. Karena nilai default untuk dec adalah 0, maka kita dapat langsung menuliskan nama fungsi rounded_mean. Adapun untuk kolom amt_trans misalkan akan kita bulatkan hingga 1 desimal. Karena kita perlu mengisi argumen untuk parameter dec maka kita dapat membuat fungsi lambda dimana di dalamnya akan memanggil fungsi rounded_mean dan mengatur nilai parameter dec=1.

Python

import numpy as np

# fungsi untuk membulatkan nilai rata-rata dengan jumlah desimal tertentu
def rounded_mean (column, dec=0):
    return np.round(column.mean(), dec)


sum_by_city_by_type = data.groupby(["city", "store_type"]) \
                          .agg({"num_trans": rounded_mean, 
                                "amt_trans": lambda x: rounded_mean(x, dec=1)}) \
                          .reset_index()

print(sum_by_city_by_type)
# OUTPUT

  city store_type  num_trans  amt_trans
0    A        Big     1582.0   165464.9
1    A     Medium     1088.0   105889.6
2    A      Small      741.0    77159.7
3    B        Big     1476.0   113538.1
4    B     Medium     1042.0    83586.7
5    B      Small      847.0    67042.2
6    C        Big     1334.0   155351.0
7    C     Medium      920.0   113927.2
8    C      Small      776.0    86079.8 
Contoh 11. Agregasi perbandingan transaksi terbesar dan terkecil menurut kolom city

Pada contoh berikut, kita membuat fungsi yang mengukur perbandingan antara nilai terbesar dibandingkan dengan nilai terkecilnya. Ketika fungsi ini kita terapkan pada agregasi kolom num_trans dan amt_trans maka akan diperoleh hasil perbandingan transaksi terbesar terhadap transaksi terkcilnya.

Dari hasil yang diperoleh dapat kita simpulkan misalkan untuk Kota C, perbandingan transaksi dari toko dengan transaksi terbesar adalah 3.6 kali lebih banyak dibandingkan toko dengan transaksi paling sedikitnya. Serta, Perbandingan nilai transaksi pada toko dengan nilai transaksi terbesar di Kota C adalah 14.2 kali lebih besar dibandingkan toko dengan nilai transaksi terkecil.

Python

# fungsi untuk membandingkan nilai terbesar dan terkecil
def get_ratio_max_min(column):
    min_val = column.min()
    max_val = column.max()
    return np.round(max_val/min_val, 1)

minmax_diff_by_city = data.groupby("city") \
                                  .agg({"num_trans": get_ratio_max_min, 
                                        "amt_trans": get_ratio_max_min}) \
                                  .reset_index()

print(minmax_diff_by_city)
# OUTPUT

  city  num_trans  amt_trans
0    A        3.9        7.9
1    B        2.9       10.1
2    C        3.6       14.2

Agregasi dan Pivot (agg + pivot)

Metode pivot pada dasarnya digunakan untuk merubah data dari format long menjadi wide. Hasil agregasi menggunakan metode groupby dan agg merupakan contoh data dengan format long. Untuk itu, kita dapat menggunakan metode pivot untuk mereformat hasil agregasi menjadi wide.

Contoh 12. Agregasi dan pivot jumlah toko menurut kolom city dan store_type

Dari proses agregasi berikut, kita dapat merubah format agregasi yang memanjang ke bawah menggunakan metode pivot. Misalkan, kolom store_type kita reformat sehingga membentuk beberapa kolom sesuai dengan masing-masing kategori pada kolom ini yaitu Big, Medium dan Small. Proses sebaliknya juga dapat dilakukan dengan mengisi parameter index='store_type' dan parameter columns='city'.

Python

# agregasi data 
count_by_city_by_type = data.groupby(["city", "store_type"]) \
                          .agg({"store_id" : "count"}) \
                          .reset_index()
                          
print(count_by_city_by_type)

print(f"\n{'':-^40}\n")

# reformat long-to-wide
data_pivot = pd.pivot(count_by_city_by_type, index='city', columns='store_type', values='store_id')
print(data_pivot)
# OUTPUT

  city store_type  store_id
0    A        Big        39
1    A     Medium        40
2    A      Small        41
3    B        Big        45
4    B     Medium        41
5    B      Small        54
6    C        Big        32
7    C     Medium        28
8    C      Small        40

----------------------------------------

store_type  Big  Medium  Small
city                          
A            39      40     41
B            45      41     54
C            32      28     40
Contoh 13. Agregasi dan pivot jumlah dan nilai transaksi menurut toko dan lokasi

Dalam melakukan pivot, kita dapat menggunakan beberapa nilai sekaligus. Seperti contoh berikut, dimana kolom-kolom num_trans dan amt_trans masing-masing menjadi 3 kolom terpisah menurut kolom store_type.

catatan: parameter columns pada metode pivot juga dapat diisi dengan lebih dari satu kolom (baca: Reformat Pandas Dataframe ‘Long to Wide’)

Python

sum_by_city_by_type = data.groupby(["city", "store_type"]) \
                          .agg({"num_trans": "sum", 
                                "amt_trans": "sum"}) \
                          .reset_index()
                                                
print(sum_by_city_by_type)

print(f"\n{'':-^60}\n")

data_pivot = pd.pivot(sum_by_city_by_type , 
                      index='city', 
                      columns='store_type', 
                      values=['num_trans', 'amt_trans'])

print(data_pivot)
# OUTPUT

  city store_type  num_trans  amt_trans
0    A        Big      61693  6453130.0
1    A     Medium      43534  4235584.0
2    A      Small      30394  3163547.0
3    B        Big      66430  5109216.0
4    B     Medium      42724  3427054.0
5    B      Small      45712  3620278.0
6    C        Big      42672  4971231.0
7    C     Medium      25746  3189961.0
8    C      Small      31020  3443192.0

------------------------------------------------------------

           num_trans                    amt_trans                      
store_type       Big   Medium    Small        Big     Medium      Small
city                                                                   
A            61693.0  43534.0  30394.0  6453130.0  4235584.0  3163547.0
B            66430.0  42724.0  45712.0  5109216.0  3427054.0  3620278.0
C            42672.0  25746.0  31020.0  4971231.0  3189961.0  3443192.0

Agregasi dan Pivot (pivot_table)

Pada contoh sebelumnya, untuk proses pivot menggunakan metode pivot kita melakukan agregasi pada dataframe terlebih dahulu. Sebenarnya pandas juga menyediakan metode pivot_table yang bekerja mirip seperti pivot table pada Microsoft Excel. Melalui metode ini, kita tidak perlu melakukan agregasi dan pivot secara terpisah, karena metode pivot_table memungkinkan kita menggunakan fungsi-fungsi agregasi secara langsung berdasarkan dataframe aslinya.

Berikut ini adalah contoh penggunaan pivot_table untuk menghasilkan output yang sama seperti pada contoh 12 dan 13

Python

# Contoh 12
pivot_12 = pd.pivot_table(data, 
                          values='store_id', 
                          index='city',
                          columns='store_type',
                          aggfunc="count")

print(pivot_12)

print(f"\n{'':-^60}\n")

pivot_13 = pd.pivot_table(data, 
                          values=['amt_trans', 'num_trans', ], 
                          index='city',
                          columns='store_type',
                          aggfunc={'num_trans':"sum", 'amt_trans': "sum"})

print(pivot_13)
# OUTPUT

store_type  Big  Medium  Small
city                          
A            39      40     41
B            45      41     54
C            32      28     40

------------------------------------------------------------

            amt_trans                       num_trans              
store_type        Big     Medium      Small       Big Medium  Small
city                                                               
A           6453130.0  4235584.0  3163547.0     61693  43534  30394
B           5109216.0  3427054.0  3620278.0     66430  42724  45712
C           4971231.0  3189961.0  3443192.0     42672  25746  31020

Baca juga: Tabulasi Data dengan Pivot Table Pandas

Selamat mencoba!!!

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi