Python Pandas - Hợp nhất / Tham gia
Pandas có các hoạt động kết hợp trong bộ nhớ đầy đủ tính năng, hiệu suất cao về mặt thành ngữ, rất giống với cơ sở dữ liệu quan hệ như SQL.
Pandas cung cấp một chức năng duy nhất, merge, là điểm nhập cho tất cả các hoạt động kết hợp cơ sở dữ liệu tiêu chuẩn giữa các đối tượng DataFrame -
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True)
Ở đây, chúng tôi đã sử dụng các tham số sau:
left - Một đối tượng DataFrame.
right - Một đối tượng DataFrame khác.
on- Các cột (tên) để tham gia. Phải được tìm thấy trong cả hai đối tượng DataFrame bên trái và bên phải.
left_on- Các cột từ DataFrame bên trái để sử dụng làm khóa. Có thể là tên cột hoặc mảng có độ dài bằng độ dài của DataFrame.
right_on- Các cột từ DataFrame bên phải để sử dụng làm khóa. Có thể là tên cột hoặc mảng có độ dài bằng độ dài của DataFrame.
left_index - Nếu True,sử dụng chỉ mục (các nhãn hàng) từ DataFrame bên trái làm (các) khóa tham gia của nó. Trong trường hợp DataFrame có MultiIndex (phân cấp), số cấp phải khớp với số lượng khóa tham gia từ DataFrame bên phải.
right_index - Cách sử dụng tương tự như left_index cho đúng DataFrame.
how- Một trong các "trái", "phải", "bên ngoài", "bên trong". Mặc định là bên trong. Mỗi phương pháp đã được mô tả dưới đây.
sort- Sắp xếp kết quả DataFrame theo các phím nối theo thứ tự từ vựng. Mặc định thành True, đặt thành False sẽ cải thiện đáng kể hiệu suất trong nhiều trường hợp.
Bây giờ chúng ta hãy tạo hai DataFrame khác nhau và thực hiện các thao tác hợp nhất trên nó.
# 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
Nó là output như sau -
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
Hợp nhất hai DataFrames trên một khó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='id')
Nó là output như sau -
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
Hợp nhất hai DataFrames trên nhiều phím
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'])
Nó là output như sau -
Name_x id subject_id Name_y
0 Alice 4 sub6 Bryce
1 Ayoung 5 sub5 Betty
Hợp nhất bằng cách sử dụng đối số 'how'
Các howđối số để hợp nhất chỉ định cách xác định khóa nào sẽ được đưa vào bảng kết quả. Nếu tổ hợp phím không xuất hiện trong bảng bên trái hoặc bên phải, các giá trị trong bảng đã nối sẽ là NA.
Đây là một bản tóm tắt về how các tùy chọn và tên tương đương SQL của chúng -
Phương pháp hợp nhất | SQL tương đương | Sự miêu tả |
---|---|---|
trái | THAM GIA BÊN NGOÀI TRÁI | Sử dụng các phím từ đối tượng bên trái |
đúng | THAM GIA ĐÚNG | Sử dụng các phím từ đối tượng bên phải |
bên ngoài | THAM GIA NGOÀI TRỜI ĐẦY ĐỦ | Sử dụng liên hợp các khóa |
bên trong | THAM GIA INNER | Sử dụng giao điểm của các phím |
Chỗ nối bên trái
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')
Nó là output như sau -
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
Tham gia đúng
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')
Nó là output như sau -
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
Tham gia bên ngoài
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')
Nó là output như sau -
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
Tham gia bên trong
Tham gia sẽ được thực hiện trên chỉ mục. Hoạt động tham gia tôn vinh đối tượng mà nó được gọi. Vì thế,a.join(b) Không bằng 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')
Nó là output như sau -
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