Cách tham gia hai bảng trong Python Pandas

Một tính năng thiết yếu được cung cấp bởi Pandas là các hoạt động kết hợp và hợp nhất trong bộ nhớ, hiệu suất cao của nó. Nếu bạn đã từng làm việc với cơ sở dữ liệu, bạn sẽ quen thuộc với kiểu tương tác dữ liệu này. Giao diện chính của chức năng này là hàm

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
0 và chúng ta sẽ xem một số ví dụ về cách thức hoạt động của hàm này trong thực tế

Show

Để thuận tiện, chúng tôi sẽ bắt đầu bằng cách xác định lại chức năng của

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
1 từ phần trước

Trong 1]

import pandas as pd
import numpy as np

class display(object):
    """Display HTML representation of multiple objects"""
    template = """<div style="float: left; padding: 10px;">
    <p style='font-family:"Courier New", Courier, monospace'>{0}</p>{1}
    </div>"""
    def __init__(self, *args):
        self.args = args
        
    def _repr_html_(self):
        return '\n'.join(self.template.format(a, eval(a)._repr_html_())
                         for a in self.args)
    
    def __repr__(self):
        return '\n\n'.join(a + '\n' + repr(eval(a))
                           for a in self.args)

đại số quan hệ

Hành vi được triển khai trong

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
2 là một tập hợp con của cái được gọi là đại số quan hệ, là một bộ quy tắc chính thức để thao tác dữ liệu quan hệ và tạo thành nền tảng khái niệm cho các hoạt động có sẵn trong hầu hết các cơ sở dữ liệu. Điểm mạnh của phương pháp đại số quan hệ là nó đề xuất một số phép toán nguyên thủy, chúng trở thành nền tảng của các phép toán phức tạp hơn trên bất kỳ tập dữ liệu nào. Với từ vựng về các hoạt động cơ bản này được triển khai hiệu quả trong cơ sở dữ liệu hoặc chương trình khác, có thể thực hiện một loạt các hoạt động tổng hợp khá phức tạp

Pandas triển khai một số khối xây dựng cơ bản này trong hàm

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
2 và phương thức
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
4 có liên quan của
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
5 và
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
6. Như chúng ta sẽ thấy, chúng cho phép bạn liên kết dữ liệu từ các nguồn khác nhau một cách hiệu quả

Danh mục tham gia

Hàm

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
2 thực hiện một số loại liên kết. phép nối một đối một, nhiều đối một và nhiều đối nhiều. Tất cả ba loại liên kết được truy cập thông qua một cuộc gọi giống hệt nhau tới giao diện
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
2; . Ở đây chúng tôi sẽ hiển thị các ví dụ đơn giản về ba loại hợp nhất và thảo luận thêm về các tùy chọn chi tiết bên dưới

Tham gia một đối một

Có lẽ kiểu diễn giải hợp nhất đơn giản nhất là phép nối một đối một, theo nhiều cách rất giống với phép nối theo cột được thấy trong Kết hợp các bộ dữ liệu. Concat và Append. Như một ví dụ cụ thể, hãy xem xét hai

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
9 sau đây chứa thông tin về một số nhân viên trong một công ty

Trong 2]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
1

Ra[2]

df1

nhóm nhân viên0Kế toán Bob1JakeKỹ thuật2LisaKỹ thuật3SueHR

df2

employeehire_date0Lisa20041Bob20082Jake20123Sue2014

Để kết hợp thông tin này thành một

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
20 duy nhất, chúng ta có thể sử dụng hàm
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
2

Trong 3]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
4

Ra[3]

employeegrouphire_date0BobAccounting20081JakeEngineering20122LisaEngineering20043SueHR2014

Hàm

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
2 nhận ra rằng mỗi
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
20 có một cột "nhân viên" và tự động tham gia bằng cách sử dụng cột này làm khóa. Kết quả của việc hợp nhất là một
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
20 mới kết hợp thông tin từ hai đầu vào. Lưu ý rằng thứ tự các mục trong mỗi cột không nhất thiết phải được duy trì. trong trường hợp này, thứ tự của cột "nhân viên" khác nhau giữa
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
25 và
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
26 và hàm
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
2 giải thích chính xác điều này. Ngoài ra, hãy nhớ rằng việc hợp nhất nói chung loại bỏ chỉ mục, ngoại trừ trường hợp đặc biệt hợp nhất theo chỉ mục (xem từ khóa
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
28 và
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
29, được thảo luận trong giây lát)

Liên kết nhiều người một

Phép nối nhiều-một là phép nối trong đó một trong hai cột chính chứa các mục nhập trùng lặp. Đối với trường hợp nhiều-một, kết quả

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
20 sẽ giữ nguyên các mục nhập trùng lặp đó khi thích hợp. Xem xét ví dụ sau về liên kết nhiều-một

Trong [4]

import pandas as pd
import numpy as np

class display(object):
    """Display HTML representation of multiple objects"""
    template = """<div style="float: left; padding: 10px;">
    <p style='font-family:"Courier New", Courier, monospace'>{0}</p>{1}
    </div>"""
    def __init__(self, *args):
        self.args = args
        
    def _repr_html_(self):
        return '\n'.join(self.template.format(a, eval(a)._repr_html_())
                         for a in self.args)
    
    def __repr__(self):
        return '\n\n'.join(a + '\n' + repr(eval(a))
                           for a in self.args)
4

Ra[4]

df3

employeegrouphire_date0BobAccounting20081JakeEngineering20122LisaEngineering20043SueHR2014

df4

nhómgiám sát0Kế toánCarly1Kỹ thuậtHướng dẫn2HRSteve

pd. hợp nhất (df3, df4)

employeegrouphire_datesupervisor0BobAccounting2008Carly1JakeEngineering2012Guido2LisaEngineering2004Guido3SueHR2014Steve

Kết quả ________ 120 có một cột bổ sung với thông tin "người giám sát", trong đó thông tin được lặp lại ở một hoặc nhiều vị trí theo yêu cầu của đầu vào

Liên kết nhiều-nhiều

Các phép nối nhiều-nhiều hơi khó hiểu về mặt khái niệm, nhưng vẫn được xác định rõ ràng. Nếu cột khóa trong cả mảng bên trái và bên phải chứa các cột trùng lặp, thì kết quả là hợp nhất nhiều-nhiều. Điều này có lẽ sẽ rõ ràng nhất với một ví dụ cụ thể. Hãy xem xét những điều sau đây, trong đó chúng tôi có một

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
20 thể hiện một hoặc nhiều kỹ năng liên quan đến một nhóm cụ thể. Bằng cách thực hiện liên kết nhiều-nhiều, chúng tôi có thể khôi phục các kỹ năng liên quan đến bất kỳ cá nhân nào

Trong [5]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")

Ra[5]

df1

nhóm nhân viên0Kế toán Bob1JakeKỹ thuật2LisaKỹ thuật3SueHR

df5

kỹ năng nhóm0Kế toán toán1Bảng tính kế toán2Kỹ thuật viết mã3Kỹ thuật linux4Bảng tính nhân sự5Tổ chức nhân sự

pd. hợp nhất (df1, df5)

nhân viên nhóm kỹ năng0BobKế toán toán học1BobBảng tính kế toán2JakeEngineeringcoding3JakeEngineeringlinux4LisaEngineeringcoding5LisaEngineeringlinux6SueHRbảng tính7SueHRTổ chức

Ba loại liên kết này có thể được sử dụng với các công cụ Pandas khác để triển khai nhiều chức năng. Nhưng trên thực tế, các bộ dữ liệu hiếm khi rõ ràng như bộ dữ liệu chúng tôi đang làm việc ở đây. Trong phần sau đây, chúng ta sẽ xem xét một số tùy chọn được cung cấp bởi

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
2 cho phép bạn điều chỉnh cách thức hoạt động của các thao tác nối

Thông số kỹ thuật của Khóa hợp nhất

Chúng ta đã thấy hành vi mặc định của

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
2. nó tìm kiếm một hoặc nhiều tên cột phù hợp giữa hai đầu vào và sử dụng tên này làm khóa. Tuy nhiên, thường thì các tên cột sẽ không khớp với nhau một cách độc đáo và
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
2 cung cấp nhiều tùy chọn để xử lý việc này

Từ khóa df5 = pd.DataFrame({'group': ['Accounting', 'Accounting', 'Engineering', 'Engineering', 'HR', 'HR'], 'skills': ['math', 'spreadsheets', 'coding', 'linux', 'spreadsheets', 'organization']}) display('df1', 'df5', "pd.merge(df1, df5)") 16

Đơn giản nhất, bạn có thể chỉ định rõ ràng tên của cột chính bằng cách sử dụng từ khóa

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
16, lấy tên cột hoặc danh sách tên cột

Trong [6]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
2

Ra[6]

df1

nhóm nhân viên0Kế toán Bob1JakeKỹ thuật2LisaKỹ thuật3SueHR

df2

employeehire_date0Lisa20041Bob20082Jake20123Sue2014

pd. hợp nhất (df1, df2, on='nhân viên')

employeegrouphire_date0BobAccounting20081JakeEngineering20122LisaEngineering20043SueHR2014

Tùy chọn này chỉ hoạt động nếu cả

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
20 bên trái và bên phải đều có tên cột được chỉ định

Từ khóa df5 = pd.DataFrame({'group': ['Accounting', 'Accounting', 'Engineering', 'Engineering', 'HR', 'HR'], 'skills': ['math', 'spreadsheets', 'coding', 'linux', 'spreadsheets', 'organization']}) display('df1', 'df5', "pd.merge(df1, df5)") 19 và df5 = pd.DataFrame({'group': ['Accounting', 'Accounting', 'Engineering', 'Engineering', 'HR', 'HR'], 'skills': ['math', 'spreadsheets', 'coding', 'linux', 'spreadsheets', 'organization']}) display('df1', 'df5', "pd.merge(df1, df5)") 60

Đôi khi, bạn có thể muốn hợp nhất hai bộ dữ liệu với các tên cột khác nhau; . Trong trường hợp này, chúng ta có thể sử dụng từ khóa

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
19 và
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
60 để chỉ định tên hai cột

Trong [7]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
1

Ra[7]

df1

nhóm nhân viên0Kế toán Bob1JakeKỹ thuật2LisaKỹ thuật3SueHR

df3

tênlương0Bob700001Jake800002Lisa1200003Sue90000

pd. hợp nhất(df1, df3, left_on="nhân viên", right_on="tên")

nhân viênnhómtênlương0BobKế toánBob700001JakeKỹ thuậtJake800002LisaKỹ thuậtLisa1200003SueHRSue90000

Kết quả có một cột dư thừa mà chúng ta có thể loại bỏ nếu muốn–ví dụ: bằng cách sử dụng phương pháp

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
63 của
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
20 giây

Trong [8]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
6

Ra[8]

nhân viênnhóm lương0BobKế toán700001JakeEngineering800002LisaEngineering1200003SueHR90000

Từ khóa df5 = pd.DataFrame({'group': ['Accounting', 'Accounting', 'Engineering', 'Engineering', 'HR', 'HR'], 'skills': ['math', 'spreadsheets', 'coding', 'linux', 'spreadsheets', 'organization']}) display('df1', 'df5', "pd.merge(df1, df5)") 28 và df5 = pd.DataFrame({'group': ['Accounting', 'Accounting', 'Engineering', 'Engineering', 'HR', 'HR'], 'skills': ['math', 'spreadsheets', 'coding', 'linux', 'spreadsheets', 'organization']}) display('df1', 'df5', "pd.merge(df1, df5)") 29

Đôi khi, thay vì hợp nhất trên một cột, bạn muốn hợp nhất trên một chỉ mục. Ví dụ: dữ liệu của bạn có thể trông như thế này

Trong [9]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
5

Ra[9]

df1a

nhómnhân viênBobKế toánJakeEngineeringLisaEngineeringSueHR

df2a

thuê_dateemployeeLisa2004Bob2008Jake2012Sue2014

Bạn có thể sử dụng chỉ mục làm khóa để hợp nhất bằng cách chỉ định cờ

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
28 và/hoặc
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
29 trong
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
2

Trong [10]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
9

Ra[10]

df1a

nhómnhân viênBobKế toánJakeEngineeringLisaEngineeringSueHR

df2a

thuê_dateemployeeLisa2004Bob2008Jake2012Sue2014

pd. hợp nhất (df1a, df2a, left_index=True, right_index=True)

grouphire_dateemployeeLisaEngineering2004BobAccounting2008JakeEngineering2012SueHR2014

Để thuận tiện,

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
20 triển khai phương thức
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
4, thực hiện hợp nhất mặc định để tham gia vào các chỉ số

Trong [11]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
10

Ra[11]

df1a

nhómnhân viênBobKế toánJakeEngineeringLisaEngineeringSueHR

df2a

thuê_dateemployeeLisa2004Bob2008Jake2012Sue2014

df1a. tham gia (df2a)

grouphire_dateemployeeBobAccounting2008JakeEngineering2012LisaEngineering2004SueHR2014

Nếu bạn muốn kết hợp các chỉ số và cột, bạn có thể kết hợp

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
28 với
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
60 hoặc
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
19 với
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
29 để có được hành vi mong muốn

Trong [12]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
11

Ra[12]

df1a

nhómnhân viênBobKế toánJakeEngineeringLisaEngineeringSueHR

df3

tênlương0Bob700001Jake800002Lisa1200003Sue90000

pd. hợp nhất (df1a, df3, left_index=True, right_on='name')

tên nhómlương0Kế toánBob700001Kỹ thuậtJake800002Kỹ thuậtLisa1200003HRSue90000

Tất cả các tùy chọn này cũng hoạt động với nhiều chỉ mục và/hoặc nhiều cột; . Để biết thêm thông tin về điều này, hãy xem phần "Hợp nhất, Tham gia và Ghép nối" trong tài liệu Pandas

Chỉ định Set Arithmetic cho Joins

Trong tất cả các ví dụ trước, chúng tôi đã đề cập đến một vấn đề quan trọng cần cân nhắc khi thực hiện phép nối. loại tập hợp số học được sử dụng trong phép nối. Điều này xuất hiện khi một giá trị xuất hiện trong một cột chính nhưng không xuất hiện trong cột khác. Hãy xem xét ví dụ này

Trong [13]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
12

Ra[13]

df6

tênmón ăn0Cá Peter 1Đậu Paul 2Bánh mì Mary

df7

uống tên0Marywine1Josephbeer

pd. hợp nhất (df6, df7)

tênthực phẩmđồ uống0Marybreadwine

Ở đây, chúng tôi đã hợp nhất hai bộ dữ liệu chỉ có một mục nhập "tên" chung. ma-ri-a. Theo mặc định, kết quả chứa giao điểm của hai bộ đầu vào; . Chúng tôi có thể chỉ định điều này một cách rõ ràng bằng cách sử dụng từ khóa

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
56, mặc định là
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
57

Trong [14]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
13

Ra[14]

tênthực phẩmđồ uống0Marybreadwine

Các tùy chọn khác cho từ khóa

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
56 là
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
59,
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
90 và
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
91. Phép nối ngoài trả về phép nối qua phép nối của các cột đầu vào và điền vào tất cả các giá trị còn thiếu bằng NA

Trong [15]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
14

Ra[15]

df6

tênmón ăn0Cá Peter 1Đậu Paul 2Bánh mì Mary

df7

uống tên0Marywine1Josephbeer

pd. hợp nhất (df6, df7, how='bên ngoài')

tênmón ănuống0PeterfishNaN1PaulbeansNaN2Rượu bánh mì Mary3JosephNaNbeer

Phép nối trái và phép nối phải return lần lượt nối qua các mục bên trái và mục bên phải. Ví dụ

Trong [16]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
15

Ra[16]

df6

tênmón ăn0Cá Peter 1Đậu Paul 2Bánh mì Mary

df7

uống tên0Marywine1Josephbeer

pd. hợp nhất (df6, df7, how='left')

tênmón ănđồ uống0PeterfishNaN1PaulbeansNaN2Mary bánh mì rượu vang

Các hàng đầu ra bây giờ tương ứng với các mục trong đầu vào bên trái. Sử dụng

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
92 hoạt động theo cách tương tự

Tất cả các tùy chọn này có thể được áp dụng trực tiếp cho bất kỳ loại liên kết nào trước đó

Chồng chéo tên cột. Từ khóa df5 = pd.DataFrame({'group': ['Accounting', 'Accounting', 'Engineering', 'Engineering', 'HR', 'HR'], 'skills': ['math', 'spreadsheets', 'coding', 'linux', 'spreadsheets', 'organization']}) display('df1', 'df5', "pd.merge(df1, df5)") 93

Cuối cùng, bạn có thể rơi vào trường hợp hai

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
20 đầu vào của bạn có tên cột xung đột. Hãy xem xét ví dụ này

Trong [17]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
16

Ra[17]

df8

tênrank0Bob11Jake22Lisa33Sue4

df9

tênrank0Bob31Jake12Lisa43Sue2

pd. hợp nhất (df8, df9, on="name")

namerank_xrank_y0Bob131Jake212Lisa343Sue42

Vì đầu ra sẽ có hai tên cột xung đột, nên hàm hợp nhất sẽ tự động nối thêm hậu tố

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
95 hoặc
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
96 để làm cho các cột đầu ra trở nên độc nhất. Nếu các giá trị mặc định này không phù hợp, có thể chỉ định hậu tố tùy chỉnh bằng cách sử dụng từ khóa
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
93

Trong [18]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
17

Hết[18]

df8

tênrank0Bob11Jake22Lisa33Sue4

df9

tênrank0Bob31Jake12Lisa43Sue2

pd. hợp nhất (df8, df9, on="name", suffixes=["_L", "_R"])

namerank_Lrank_R0Bob131Jake212Lisa343Sue42

Các hậu tố này hoạt động trong bất kỳ mẫu liên kết nào có thể có và cũng hoạt động nếu có nhiều cột chồng chéo

Để biết thêm thông tin về các mẫu này, hãy xem Tập hợp và Nhóm nơi chúng tôi tìm hiểu sâu hơn một chút về đại số quan hệ. Ngoài ra, hãy xem tài liệu "Hợp nhất, Tham gia và Ghép nối" của Pandas để thảo luận thêm về các chủ đề này

Ví dụ. Dữ liệu Hoa Kỳ

Các hoạt động hợp nhất và tham gia xuất hiện thường xuyên nhất khi kết hợp dữ liệu từ các nguồn khác nhau. Ở đây chúng tôi sẽ xem xét một ví dụ về một số dữ liệu về các tiểu bang Hoa Kỳ và dân số của họ. Các tệp dữ liệu có thể được tìm thấy tại http. //github. com/jakevdp/data-USstates/

Trong 19]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
18

Chúng ta hãy xem xét ba bộ dữ liệu, sử dụng chức năng Pandas

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
98

Trong 20]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
19

Hết[20]

nhạc pop. cái đầu()

bang/khu vựcnămdân số0ALunder1820121117489. 01ALtotal20124817528. 02ALunder1820101130966. 03ALtotal20104785570. 04ALunder1820111125763. 0

khu vực. cái đầu()

diện tích (sq. mi)0Alabama524231Alaska6564252Arizona1140063Arkansas531824California163707

viết tắt. cái đầu()

tiểu bang viết tắt0AlabamaAL1AlaskaAK2ArizonaAZ3ArkansasAR4CaliforniaCA

Với thông tin này, giả sử chúng tôi muốn tính toán một kết quả tương đối đơn giản. xếp hạng các bang và vùng lãnh thổ của Hoa Kỳ theo mật độ dân số năm 2010. Rõ ràng chúng tôi có dữ liệu ở đây để tìm kết quả này, nhưng chúng tôi sẽ phải kết hợp các bộ dữ liệu để tìm ra kết quả

Chúng tôi sẽ bắt đầu với sự hợp nhất nhiều thành một sẽ cung cấp cho chúng tôi tên tiểu bang đầy đủ trong quần thể

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
20. Chúng tôi muốn hợp nhất dựa trên cột
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
100 của
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
101 và cột
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
102 của
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
103. Chúng tôi sẽ sử dụng
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
104 để đảm bảo không có dữ liệu nào bị loại bỏ do nhãn không khớp

Trong [21]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
40

Hết[21]

tiểu bang/khu vực nămdân sốtiểu bang0ALunder1820121117489. 0Alabama1ALtotal20124817528. 0Alabama2ALunder1820101130966. 0Alabama3ALtotal20104785570. 0Alabama4ALunder1820111125763. 0Alabama

Hãy kiểm tra kỹ xem có bất kỳ sự không phù hợp nào ở đây hay không, điều mà chúng ta có thể thực hiện bằng cách tìm kiếm các hàng có giá trị rỗng

Trong [22]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
41

Hết[22]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
42

Một số thông tin

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
105 không có giá trị;

Trong [23]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
43

Hết[23]

bang/khu vực nămdân sốbang2448PRunder181990NaNNaN2449PRtotal1990NaNNaN2450PRtotal1991NaNNaN2451PRunder181991NaNNaN2452PRtotal1993NaNNaN

Có vẻ như tất cả các giá trị dân số rỗng là từ Puerto Rico trước năm 2000;

Quan trọng hơn, chúng tôi cũng thấy rằng một số mục nhập mới của

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
106 cũng không có giá trị, điều đó có nghĩa là không có mục nhập tương ứng trong khóa
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
103. Hãy tìm xem khu vực nào thiếu trận đấu này

Trong [24]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
44

Ra[24]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
45

Chúng ta có thể nhanh chóng suy ra vấn đề. dữ liệu dân số của chúng tôi bao gồm các mục nhập cho Puerto Rico (PR) và toàn bộ Hoa Kỳ (USA), trong khi các mục nhập này không xuất hiện trong khóa viết tắt của tiểu bang. Chúng tôi có thể khắc phục những điều này một cách nhanh chóng bằng cách điền vào các mục thích hợp

Trong [25]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
46

Hết[25]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
47

Không còn null trong cột

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
106. chúng ta đã sẵn sàng

Bây giờ chúng ta có thể hợp nhất kết quả với dữ liệu vùng bằng quy trình tương tự. Kiểm tra kết quả của chúng tôi, chúng tôi sẽ muốn tham gia vào cột

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
106 trong cả hai

Trong [26]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
48

Hết[26]

tiểu bang/khu vực nămdân số tiểu bangkhu vực (sq. mi)0ALunder1820121117489. 0Alabama52423. 01ALtotal20124817528. 0Alabama52423. 02ALunder1820101130966. 0Alabama52423. 03ALtotal20104785570. 0Alabama52423. 04ALunder1820111125763. 0Alabama52423. 0

Một lần nữa, hãy kiểm tra null để xem liệu có bất kỳ sự không phù hợp nào không

Trong [27]

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
49

Hết[27]

import pandas as pd
import numpy as np

class display(object):
    """Display HTML representation of multiple objects"""
    template = """<div style="float: left; padding: 10px;">
    <p style='font-family:"Courier New", Courier, monospace'>{0}</p>{1}
    </div>"""
    def __init__(self, *args):
        self.args = args
        
    def _repr_html_(self):
        return '\n'.join(self.template.format(a, eval(a)._repr_html_())
                         for a in self.args)
    
    def __repr__(self):
        return '\n\n'.join(a + '\n' + repr(eval(a))
                           for a in self.args)
40

Không có giá trị rỗng trong cột

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
110;

Trong [28]

import pandas as pd
import numpy as np

class display(object):
    """Display HTML representation of multiple objects"""
    template = """<div style="float: left; padding: 10px;">
    <p style='font-family:"Courier New", Courier, monospace'>{0}</p>{1}
    </div>"""
    def __init__(self, *args):
        self.args = args
        
    def _repr_html_(self):
        return '\n'.join(self.template.format(a, eval(a)._repr_html_())
                         for a in self.args)
    
    def __repr__(self):
        return '\n\n'.join(a + '\n' + repr(eval(a))
                           for a in self.args)
41

Hết[28]

import pandas as pd
import numpy as np

class display(object):
    """Display HTML representation of multiple objects"""
    template = """<div style="float: left; padding: 10px;">
    <p style='font-family:"Courier New", Courier, monospace'>{0}</p>{1}
    </div>"""
    def __init__(self, *args):
        self.args = args
        
    def _repr_html_(self):
        return '\n'.join(self.template.format(a, eval(a)._repr_html_())
                         for a in self.args)
    
    def __repr__(self):
        return '\n\n'.join(a + '\n' + repr(eval(a))
                           for a in self.args)
42

Chúng tôi thấy rằng

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
111
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
20 của chúng tôi không chứa toàn bộ diện tích của Hoa Kỳ. Chúng tôi có thể chèn giá trị thích hợp (ví dụ: sử dụng tổng của tất cả các khu vực tiểu bang), nhưng trong trường hợp này, chúng tôi sẽ chỉ bỏ các giá trị null vì mật độ dân số của toàn bộ Hoa Kỳ không liên quan đến cuộc thảo luận hiện tại của chúng tôi

Trong [29]

import pandas as pd
import numpy as np

class display(object):
    """Display HTML representation of multiple objects"""
    template = """<div style="float: left; padding: 10px;">
    <p style='font-family:"Courier New", Courier, monospace'>{0}</p>{1}
    </div>"""
    def __init__(self, *args):
        self.args = args
        
    def _repr_html_(self):
        return '\n'.join(self.template.format(a, eval(a)._repr_html_())
                         for a in self.args)
    
    def __repr__(self):
        return '\n\n'.join(a + '\n' + repr(eval(a))
                           for a in self.args)
43

Hết[29]

tiểu bang/khu vực nămdân số tiểu bangkhu vực (sq. mi)0ALunder1820121117489. 0Alabama52423. 01ALtotal20124817528. 0Alabama52423. 02ALunder1820101130966. 0Alabama52423. 03ALtotal20104785570. 0Alabama52423. 04ALunder1820111125763. 0Alabama52423. 0

Bây giờ chúng tôi có tất cả dữ liệu chúng tôi cần. Để trả lời câu hỏi quan tâm, trước tiên hãy chọn phần dữ liệu tương ứng với năm 2000 và tổng dân số. Chúng ta sẽ sử dụng hàm

df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
113 để thực hiện việc này một cách nhanh chóng (điều này yêu cầu phải cài đặt gói
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
114; xem phần High-Performance Pandas.
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
115 và
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display('df1', 'df5', "pd.merge(df1, df5)")
113)

Trong [30]

import pandas as pd
import numpy as np

class display(object):
    """Display HTML representation of multiple objects"""
    template = """<div style="float: left; padding: 10px;">
    <p style='font-family:"Courier New", Courier, monospace'>{0}</p>{1}
    </div>"""
    def __init__(self, *args):
        self.args = args
        
    def _repr_html_(self):
        return '\n'.join(self.template.format(a, eval(a)._repr_html_())
                         for a in self.args)
    
    def __repr__(self):
        return '\n\n'.join(a + '\n' + repr(eval(a))
                           for a in self.args)
44

Ra[30]

tiểu bang/khu vực nămdân số tiểu bangkhu vực (sq. mi)3ALtotal20104785570. 0Alabama52423. 091AKtotal2010713868. 0Alaska656425. 0101AZtotal20106408790. 0Arizona114006. 0189ARtotal20102922280. 0Arkansas53182. 0197CAtotal201037333601. 0California163707. 0

Bây giờ hãy tính mật độ dân số và hiển thị nó theo thứ tự. Chúng tôi sẽ bắt đầu bằng cách lập chỉ mục lại dữ liệu của chúng tôi về trạng thái và sau đó tính toán kết quả

Trong [31]

import pandas as pd
import numpy as np

class display(object):
    """Display HTML representation of multiple objects"""
    template = """<div style="float: left; padding: 10px;">
    <p style='font-family:"Courier New", Courier, monospace'>{0}</p>{1}
    </div>"""
    def __init__(self, *args):
        self.args = args
        
    def _repr_html_(self):
        return '\n'.join(self.template.format(a, eval(a)._repr_html_())
                         for a in self.args)
    
    def __repr__(self):
        return '\n\n'.join(a + '\n' + repr(eval(a))
                           for a in self.args)
45

Trong [32]

import pandas as pd
import numpy as np

class display(object):
    """Display HTML representation of multiple objects"""
    template = """<div style="float: left; padding: 10px;">
    <p style='font-family:"Courier New", Courier, monospace'>{0}</p>{1}
    </div>"""
    def __init__(self, *args):
        self.args = args
        
    def _repr_html_(self):
        return '\n'.join(self.template.format(a, eval(a)._repr_html_())
                         for a in self.args)
    
    def __repr__(self):
        return '\n\n'.join(a + '\n' + repr(eval(a))
                           for a in self.args)
46

Ra[32]

import pandas as pd
import numpy as np

class display(object):
    """Display HTML representation of multiple objects"""
    template = """<div style="float: left; padding: 10px;">
    <p style='font-family:"Courier New", Courier, monospace'>{0}</p>{1}
    </div>"""
    def __init__(self, *args):
        self.args = args
        
    def _repr_html_(self):
        return '\n'.join(self.template.format(a, eval(a)._repr_html_())
                         for a in self.args)
    
    def __repr__(self):
        return '\n\n'.join(a + '\n' + repr(eval(a))
                           for a in self.args)
47

Kết quả là xếp hạng các tiểu bang của Hoa Kỳ cùng với Washington, DC và Puerto Rico theo thứ tự mật độ dân số năm 2010, tính theo cư dân trên mỗi dặm vuông. Chúng ta có thể thấy rằng cho đến nay khu vực dày đặc nhất trong tập dữ liệu này là Washington, DC (i. e. , Quận Columbia);

Chúng tôi cũng có thể kiểm tra phần cuối của danh sách

Trong [33]

import pandas as pd
import numpy as np

class display(object):
    """Display HTML representation of multiple objects"""
    template = """<div style="float: left; padding: 10px;">
    <p style='font-family:"Courier New", Courier, monospace'>{0}</p>{1}
    </div>"""
    def __init__(self, *args):
        self.args = args
        
    def _repr_html_(self):
        return '\n'.join(self.template.format(a, eval(a)._repr_html_())
                         for a in self.args)
    
    def __repr__(self):
        return '\n\n'.join(a + '\n' + repr(eval(a))
                           for a in self.args)
48

Ra[33]

import pandas as pd
import numpy as np

class display(object):
    """Display HTML representation of multiple objects"""
    template = """<div style="float: left; padding: 10px;">
    <p style='font-family:"Courier New", Courier, monospace'>{0}</p>{1}
    </div>"""
    def __init__(self, *args):
        self.args = args
        
    def _repr_html_(self):
        return '\n'.join(self.template.format(a, eval(a)._repr_html_())
                         for a in self.args)
    
    def __repr__(self):
        return '\n\n'.join(a + '\n' + repr(eval(a))
                           for a in self.args)
49

Chúng tôi thấy rằng cho đến nay, bang có mật độ dân số thấp nhất là Alaska, trung bình hơn một cư dân trên một dặm vuông

Kiểu hợp nhất dữ liệu lộn xộn này là một nhiệm vụ phổ biến khi cố gắng trả lời các câu hỏi bằng các nguồn dữ liệu trong thế giới thực. Tôi hy vọng rằng ví dụ này đã cung cấp cho bạn ý tưởng về cách bạn có thể kết hợp các công cụ mà chúng tôi đã đề cập để hiểu rõ hơn về dữ liệu của bạn

Làm cách nào để nối hai bảng trong Python?

Các đối tượng nối .
pd. concat( objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, )
>>> Trong [6]. kết quả = pd. concat(khung, phím=["x", "y", "z"])
>>> Trong [7]. kết quả. .
khung = [ process_your_file(f) cho f trong tệp ] kết quả = pd

Làm cách nào để tham gia hai khung dữ liệu trong gấu trúc dựa trên cột?

Chúng ta có thể hợp nhất hai Khung dữ liệu Pandas trên một số cột nhất định bằng chức năng hợp nhất bằng cách chỉ định các cột nhất định để hợp nhất. Ví dụ 1. Hãy tạo một Dataframe và sau đó hợp nhất chúng thành một dataframe duy nhất. Tạo một khung dữ liệu. Python3

Sự khác biệt giữa tham gia () và hợp nhất () trong gấu trúc là gì?

Cả phép nối và hợp nhất đều có thể được sử dụng để kết hợp hai khung dữ liệu nhưng phương thức nối kết hợp hai khung dữ liệu trên cơ sở chỉ mục của chúng trong khi phương thức hợp nhất linh hoạt hơn và cho phép chúng tôi chỉ định . .