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