Python Pandas - Penggabungan / Bergabung

Pandas memiliki operasi gabungan dalam memori berfitur lengkap dan berperforma tinggi yang secara idiomatis sangat mirip dengan database relasional seperti SQL.

Panda menyediakan satu fungsi, merge, sebagai titik masuk untuk semua operasi gabungan database standar antara objek DataFrame -

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True)

Di sini, kami telah menggunakan parameter berikut -

  • left - Objek DataFrame.

  • right - Objek DataFrame lainnya.

  • on- Kolom (nama) untuk bergabung. Harus ditemukan di objek DataFrame kiri dan kanan.

  • left_on- Kolom dari DataFrame kiri untuk digunakan sebagai kunci. Bisa berupa nama kolom atau array dengan panjang yang sama dengan panjang DataFrame.

  • right_on- Kolom dari DataFrame kanan untuk digunakan sebagai kunci. Bisa berupa nama kolom atau array dengan panjang yang sama dengan panjang DataFrame.

  • left_index - Jika True,gunakan indeks (label baris) dari DataFrame kiri sebagai kunci penghubungnya. Dalam kasus DataFrame dengan MultiIndex (hierarki), jumlah level harus sesuai dengan jumlah kunci penghubung dari DataFrame yang benar.

  • right_index - Penggunaan yang sama seperti left_index untuk DataFrame yang benar.

  • how- Salah satu dari 'kiri', 'kanan', 'luar', 'dalam'. Default-nya ke dalam. Setiap metode telah dijelaskan di bawah ini.

  • sort- Urutkan hasil DataFrame dengan tombol penghubung dalam urutan leksikografis. Default-nya ke True, pengaturan ke False akan meningkatkan kinerja secara substansial dalam banyak kasus.

Mari kita sekarang membuat dua DataFrames berbeda dan melakukan operasi penggabungan padanya.

# import the pandas library
import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame(
   {'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print left
print right

Nya output adalah sebagai berikut -

Name  id   subject_id
0   Alex   1         sub1
1    Amy   2         sub2
2  Allen   3         sub4
3  Alice   4         sub6
4  Ayoung  5         sub5

    Name  id   subject_id
0  Billy   1         sub2
1  Brian   2         sub4
2  Bran    3         sub3
3  Bryce   4         sub6
4  Betty   5         sub5

Gabungkan Dua DataFrames pada Key

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
	'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on='id')

Nya output adalah sebagai berikut -

Name_x   id  subject_id_x   Name_y   subject_id_y
0  Alex      1          sub1    Billy           sub2
1  Amy       2          sub2    Brian           sub4
2  Allen     3          sub4     Bran           sub3
3  Alice     4          sub6    Bryce           sub6
4  Ayoung    5          sub5    Betty           sub5

Gabungkan Dua DataFrames pada Beberapa Tombol

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
	'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on=['id','subject_id'])

Nya output adalah sebagai berikut -

Name_x   id   subject_id   Name_y
0    Alice    4         sub6    Bryce
1   Ayoung    5         sub5    Betty

Gabungkan Menggunakan Argumen 'Bagaimana'

Itu howargumen untuk menggabungkan menentukan cara menentukan kunci mana yang akan disertakan dalam tabel yang dihasilkan. Jika kombinasi tombol tidak muncul di tabel kiri atau kanan, nilai dalam tabel yang digabungkan akan menjadi NA.

Berikut adalah ringkasan dari how opsi dan nama setara SQL-nya -

Metode Gabung Setara SQL Deskripsi
kiri LEFT OUTER GABUNG Gunakan kunci dari objek kiri
Baik KANAN OUTER GABUNG Gunakan kunci dari objek yang benar
luar FULL OUTER JOIN Gunakan gabungan kunci
batin INNER GABUNG Gunakan persimpangan kunci

Gabung Kiri

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='left')

Nya output adalah sebagai berikut -

Name_x   id_x   subject_id   Name_y   id_y
0     Alex      1         sub1      NaN    NaN
1      Amy      2         sub2    Billy    1.0
2    Allen      3         sub4    Brian    2.0
3    Alice      4         sub6    Bryce    4.0
4   Ayoung      5         sub5    Betty    5.0

Bergabung dengan Benar

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='right')

Nya output adalah sebagai berikut -

Name_x  id_x   subject_id   Name_y   id_y
0      Amy   2.0         sub2    Billy      1
1    Allen   3.0         sub4    Brian      2
2    Alice   4.0         sub6    Bryce      4
3   Ayoung   5.0         sub5    Betty      5
4      NaN   NaN         sub3     Bran      3

Gabung Luar

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, how='outer', on='subject_id')

Nya output adalah sebagai berikut -

Name_x  id_x   subject_id   Name_y   id_y
0     Alex   1.0         sub1      NaN    NaN
1      Amy   2.0         sub2    Billy    1.0
2    Allen   3.0         sub4    Brian    2.0
3    Alice   4.0         sub6    Bryce    4.0
4   Ayoung   5.0         sub5    Betty    5.0
5      NaN   NaN         sub3     Bran    3.0

Gabung Batin

Bergabung akan dilakukan di indeks. Operasi gabungan menghormati objek yang dipanggil. Begitu,a.join(b) tidak sama dengan b.join(a).

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='inner')

Nya output adalah sebagai berikut -

Name_x   id_x   subject_id   Name_y   id_y
0      Amy      2         sub2    Billy      1
1    Allen      3         sub4    Brian      2
2    Alice      4         sub6    Bryce      4
3   Ayoung      5         sub5    Betty      5