Python Pandas - การรวม / การเข้าร่วม
Pandas มีการดำเนินการเข้าร่วมในหน่วยความจำที่มีคุณสมบัติครบถ้วนและมีประสิทธิภาพสูงโดยสำนวนคล้ายกับฐานข้อมูลเชิงสัมพันธ์เช่น SQL
นุ่นมีฟังก์ชั่นเดียว mergeเป็นจุดเริ่มต้นสำหรับฐานข้อมูลมาตรฐานทั้งหมดจะเข้าร่วมการดำเนินการระหว่างออบเจ็กต์ DataFrame -
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True)
ที่นี่เราได้ใช้พารามิเตอร์ต่อไปนี้ -
left - วัตถุ DataFrame
right - วัตถุ DataFrame อื่น
on- คอลัมน์ (ชื่อ) เพื่อเข้าร่วม ต้องพบในวัตถุ DataFrame ทั้งซ้ายและขวา
left_on- คอลัมน์จาก DataFrame ด้านซ้ายเพื่อใช้เป็นคีย์ อาจเป็นชื่อคอลัมน์หรืออาร์เรย์ที่มีความยาวเท่ากับความยาวของ DataFrame
right_on- คอลัมน์จาก DataFrame ด้านขวาเพื่อใช้เป็นคีย์ อาจเป็นชื่อคอลัมน์หรืออาร์เรย์ที่มีความยาวเท่ากับความยาวของ DataFrame
left_index - ถ้า True,ใช้ดัชนี (ป้ายชื่อแถว) จาก DataFrame ด้านซ้ายเป็นคีย์การเข้าร่วม ในกรณีของ DataFrame ที่มี MultiIndex (ตามลำดับชั้น) จำนวนระดับจะต้องตรงกับจำนวนคีย์การเข้าร่วมจาก DataFrame ที่ถูกต้อง
right_index - การใช้งานเช่นเดียวกับ left_index สำหรับ DataFrame ที่เหมาะสม
how- หนึ่งใน 'ซ้าย', 'ขวา', 'ด้านนอก', 'ด้านใน' ค่าเริ่มต้นเป็นภายใน แต่ละวิธีได้อธิบายไว้ด้านล่าง
sort- จัดเรียง DataFrame ผลลัพธ์ตามคีย์เข้าร่วมตามลำดับศัพท์ ค่าเริ่มต้นเป็น True การตั้งค่าเป็น False จะช่วยเพิ่มประสิทธิภาพอย่างมากในหลาย ๆ กรณี
ตอนนี้ให้เราสร้าง DataFrames สองแบบที่แตกต่างกันและดำเนินการรวมเข้าด้วยกัน
# 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
มัน output มีดังนี้ -
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
ผสานสอง DataFrames เข้ากับคีย์
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')
มัน output มีดังนี้ -
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
ผสานสอง DataFrames เข้ากับหลายปุ่ม
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'])
มัน output มีดังนี้ -
Name_x id subject_id Name_y
0 Alice 4 sub6 Bryce
1 Ayoung 5 sub5 Betty
ผสานโดยใช้อาร์กิวเมนต์ 'how'
howอาร์กิวเมนต์เพื่อผสานระบุวิธีการพิจารณาว่าจะรวมคีย์ใดในตารางผลลัพธ์ หากคีย์ผสมไม่ปรากฏในตารางด้านซ้ายหรือด้านขวาค่าในตารางที่เข้าร่วมจะเป็น NA
นี่คือบทสรุปของไฟล์ how ตัวเลือกและชื่อเทียบเท่า SQL -
วิธีผสาน | เทียบเท่า SQL | คำอธิบาย |
---|---|---|
ซ้าย | ซ้ายด้านนอกเข้าร่วม | ใช้ปุ่มจากวัตถุด้านซ้าย |
ขวา | ขวาเข้าร่วม | ใช้ปุ่มจากวัตถุที่ถูกต้อง |
ด้านนอก | เข้าร่วมเต็มรูปแบบจากภายนอก | ใช้การรวมกันของคีย์ |
ด้านใน | เข้าร่วมภายใน | ใช้จุดตัดของคีย์ |
เข้าร่วมทางซ้าย
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')
มัน output มีดังนี้ -
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
เข้าร่วมขวา
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')
มัน output มีดังนี้ -
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
การเข้าร่วมภายนอก
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')
มัน output มีดังนี้ -
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
การเข้าร่วมภายใน
การเข้าร่วมจะดำเนินการในดัชนี เข้าร่วมการดำเนินการเพื่อเป็นเกียรติแก่วัตถุที่ถูกเรียกใช้ ดังนั้น,a.join(b) ไม่เท่ากับ 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')
มัน output มีดังนี้ -
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