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