Pandas Merge
import pandas as pd penjualan = pd.read_csv('transaksi_penjualan.csv') penjual = pd.read_csv('penjual.csv') trx_penjualan = penjualan.merge(penjual, left_on='id_penjual', right_on='id') trx_penjualan2 = penjualan.merge(penjual, left_on='id_penjual', right_on='id', how='right')
Latar Belakang
Menggabungkan data dari banyak sumber, entah berupa tabel database, banyak sheets Excel atau beberapa berkas yang terpisah, merupakan sebuah keniscayaan.
Pandas memiliki beberapa fungsi yang dapat digunakan untuk keperluan itu, pada tulisan ini kita akan mencoba salah satunya, yaitu fungsi merge.
Kode
Pertama load library, yaitu pandas, dan data yang akan digunakan. Untuk kali ini data bersahadja yang kita gunakan adalah data penjual dan transaksi penjualan. Notebook (pandas_merge.ipynb) dan data yang kita gunakan dapat diakses di sini.
import pandas as pd penjualan = pd.read_csv('transaksi_penjualan.csv') penjual = pd.read_csv('penjual.csv')
Kita akan menggabungkan data penjualan dan penjual sehingga pada data penjualan ada kolom berisi nama penjual, alih-alih hanya id_penjual. Kita membutuhkan kolom referensi (atau biasa disebut primary key/foreign key pada database) yang ada pada kedua data. Dalam contoh di atas, kolom id_penjual pada data penjualan dan kolom id pada data penjual.
Kolom Referensi Berbeda Nama
Karena kolom referensi pada kedua dataframe berbeda nama maka kita perlu mengisi parameter left_on dan right_on pada fungsi merge.
trx_penjualan = penjualan.merge(penjual, left_on='id_penjual', right_on='id')
Data penjualan kita jadikan data utama atau diistilahkan dataframe kiri, karena itu parameter left_on diisi kolom id_penjual yang ada di data penjualan. Sedang data penjual menjadi dataframe kanan yang diambil hanya data yang ada di dataframe kiri dengan kolom id sebagai penghubung. Dalam gambar terlihat trx_penjualan hanya berisi 10 baris data dari data penjualan padahal data penjual memuat 20 data.
Untuk mengubah data mana yang akan ditampilkan semua barisnya, silahkan mencoba-coba parameter how pada fungsi merge. Parameter ini dapat diisi dengan ‘left’, ‘right’, ‘outer’ dan ‘inner’ (secara default ‘inner’ inilah yang digunakan). Penggunaan parameter ini sama dengan Query pada SQL.
Kolom Referensi Bernama Sama
Jika kolom referensi pada kedua dataframe memiliki nama yang sama, maka cukup mengisi parameter on pada fungsi merge.
Sebagai ilustrasi, kita buat sebuah variabel baru berisi data penjual kemudian me-rename kolom menjadi id_penjual.
penjual2 = penjual.copy() penjual2.rename(columns={'id': 'id_penjual'}, inplace=True)
Kemudian gabungkan data penjualan dengan data penjual2 tanpa mengisi parameter left_on dan right_on namun cukup menggunakan on.
trx_penjualan2 = penjualan.merge(penjual2, on='id_penjual')
Menampilkan Semua Data pada Dataframe Kanan
Pada bagian sebelumnya disebutkan bahwa parameter how secara default menggunakan inner. Jika ingin menampilkan semua data pada dataframe kanan kita dapat menggunakan ‘right‘ pada parameter how.
trx_penjualan3 = penjualan.merge(penjual2, on='id_penjual', how='right')
Semua baris pada data penjual ditampilkan. Jika penjual tersebut tidak terdapat dalam data penjualan maka kolom tanggal dan nilai akan berisi NaN.
Referensi
- https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html
- https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html
Cover Image by Ulrike Leone from Pixabay
One Reply to “Pandas Merge”