Pandas 使用索引合并数据框

Pandas 使用索引合并数据框

在本文中,我们将介绍如何使用Pandas的索引来合并数据框。在很多情况下,我们需要将多个数据框按照它们的索引合并在一起。Pandas提供了一系列的函数来实现这个目的,包括concat函数和merge函数。本文将重点介绍merge函数的使用方法。

阅读更多:Pandas 教程

merge函数

merge函数是Pandas提供的一种用于数据框合并的函数。它的语法为:

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
Python

其中,left和right是两个需要合并的数据框,how是合并方式(默认为inner),on是需要合并的列(可以是一个数列,也可以是多个数列),left_on和right_on分别表示left和right数据框中需要合并的列名,left_index和right_index表示是否使用索引来合并。suffixes是当两个数据框中具有相同列名时,区分这些列名的后缀。

下面我们来看一个简单的例子。假设我们有两个数据框df1和df2:

import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                   'B': ['B0', 'B1', 'B2', 'B3'],
                   'C': ['C0', 'C1', 'C2', 'C3']},
                   index=[0, 1, 2, 3])

df2 = pd.DataFrame({'A': ['A2', 'A3', 'A4', 'A5'],
                   'D': ['D2', 'D3', 'D4', 'D5'],
                   'E': ['E2', 'E3', 'E4', 'E5']},
                   index=[2, 3, 4, 5])
Python

这两个数据框中都有列A,我们可以使用merge函数将它们合并在一起:

result = pd.merge(df1, df2, on='A', how='inner')
Python

运行结果如下:

    A   B   C   D   E
0  A2  B2  C2  D4  E4
1  A3  B3  C3  D3  E3
Python

在这个例子中,由于我们指定了on=’A’,所以结果中只有那些在df1和df2中都有的A值被保留了下来,并且它们所属的行被合并在一起。

索引上的合并

除了在列上进行合并之外,我们还可以在索引上进行合并。

假设我们有两个数据框df1和df2,它们分别如下:

import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                   'B': ['B0', 'B1', 'B2', 'B3'],
                   'C': ['C0', 'C1', 'C2', 'C3']},
                   index=[0, 1, 2, 3])

df2 = pd.DataFrame({'D': ['D2', 'D3', 'D4', 'D5'],
                   'E': ['E2', 'E3', 'E4', 'E5']},
                   index=[2, 3, 4, 5])
Python

在这个例子中,我们可以使用merge函数来合并这两个数据框:

result = pd.merge(df1, df2, left_index=True, right_index=True, how='outer')
Python

运行结果如下:

     A    B    C   D   E
0   A0   B0   C0  NaN NaN
1   A1   B1   C1  NaN NaN
2   A2   B2   C2  D2  E2
3   A3   B3  C3  D3  E3
4  NaN  NaN  NaN  D4  E4
5  NaN  NaN  NaN  D5  E5
Python

在这个例子中,我们使用了left_index=True和right_index=True来指定在索引上进行合并,how=’outer’表示使用外连接的方式进行合并。结果中包含了df1和df2中全部的行,而那些没有对应值的单元格被填充为NaN。

当然,我们也可以使用其他的合并方式。比如说如果我们只想保留两个数据框中都存在的行(即使用内连接的方式合并),可以将how参数设置为inner:

result = pd.merge(df1, df2, left_index=True, right_index=True, how='inner')
Python

运行结果如下:

    A   B   C   D   E
2  A2  B2  C2  D2  E2
3  A3  B3  C3  D3  E3
Python

join函数

除了使用merge函数来合并数据框之外,我们还可以使用join函数。它的语法为:

df1.join(df2, how='left', lsuffix='_left', rsuffix='_right')
Python

其中,df1是需要合并的数据框,how表示合并方式,lsuffix和rsuffix分别表示当两个数据框中具有相同列名时,区分这些列名的后缀。join函数还有另外一种语法:

df1.join([df2, df3])
Python

这种语法可以在不同的数据框之间进行连接。

使用join函数时,我们需要注意的是,必须要先设置索引,否则join函数将无法识别数据框中的列名和索引。

下面我们来看一个简单的例子。假设我们有两个数据框df1和df2:

import pandas as pd

df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                   'A': ['A0', 'A1', 'A2', 'A3'],
                   'B': ['B0', 'B1', 'B2', 'B3'],
                   })

df2 = pd.DataFrame({'key': ['K2', 'K3', 'K4', 'K5'],
                   'C': ['C2', 'C3', 'C4', 'C5'],
                   'D': ['D2', 'D3', 'D4', 'D5'],
                   })
Python

我们可以使用set_index函数将key列设为索引,然后使用join函数将它们合并在一起:

df1.set_index('key').join(df2.set_index('key'), how='left', lsuffix='_left', rsuffix='_right')
Python

运行结果如下:

     A    B    C    D
key                
K0   A0   B0  NaN  NaN
K1   A1   B1  NaN  NaN
K2   A2   B2   C2   D2
K3   A3   B3   C3   D3
Python

在这个例子中,我们将df1和df2数据框中的key列设置为索引,然后使用join函数将它们以left连接的方式合并在一起。索引K4和K5在df1中不存在,因此这些行被填充为NaN。

总结

使用Pandas的merge函数和join函数可以方便地将多个数据框按照它们的列和索引进行合并。merge函数可以使用各种连接方式(内连接、外连接、左连接、右连接等),join函数则可以方便地按照索引进行连接。当处理需要合并的大型数据集时,这些函数可以帮助我们高效地完成数据整合的任务。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册