Python 如何合并这两个数据帧

Python 如何合并这两个数据帧,python,mysql,pandas,Python,Mysql,Pandas,首先,我想创建一个只包含K0,K1的数据帧 import pandas as pd left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], 'A': [1, 2, 3, 4], 'B': [1, 2, 3, 4]}) right = pd.DataFrame({'key': ['K0', 'K1'],}) #left df

首先,我想创建一个只包含K0,K1的数据帧

import pandas as pd
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                       'A': [1, 2, 3, 4],
                       'B': [1, 2, 3, 4]})
right = pd.DataFrame({'key': ['K0', 'K1'],})
#left df                         #right df
    A   B   key                        key
0   1   1   K0                     0   K0  
1   2   2   K1                     1   K1
3   3   3   K2
4   4   4   K3
然后我想创建一个只包含K2,K3的数据帧

first = pd.merge(left, right, on='key')
#first df
    A   B   key                  
0   1   1   K0                     
1   2   2   K1 

我意识到这应该通过左(右)外方法完成,但我对这种方法感到困惑。

使用
isin
构建布尔掩码:

#Expectation df
    A   B   key
0   3   3   K2
0   4   4   K3
然后使用
.loc[mask]
根据掩码选择行:

mask = left['key'].isin(right['key'])
屈服

import pandas as pd
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                       'A': [1, 2, 3, 4],
                       'B': [1, 2, 3, 4]})
right = pd.DataFrame({'key': ['K0', 'K1'],})
mask = left['key'].isin(right['key'])
first, second = left.loc[mask], left.loc[~mask]

我更喜欢这种合并和搜索的方式是: 首先,在键上设置索引(这在开始时是非常相似的概念,对吗?)

然后,当您合并或连接pandas中的两个数据帧时,您希望使用pd.concat,这是pandas用于所有合并和连接操作的方法(pandas join和merge方法也在后台使用此方法)

现在,您可以轻松选择所需的密钥:

In[10]: pd.concat([left,right], axis=1)
Out[10]: 
    A  B
K0  1  1
K1  2  2
K2  3  3
K3  4  4
left.set_index('key',inplace=True)
right.set_index('key',inplace=True)
In[10]: pd.concat([left,right], axis=1)
Out[10]: 
    A  B
K0  1  1
K1  2  2
K2  3  3
K3  4  4
In[17]: df = pd.concat([left,right], axis=1)
In[18]: df.loc[['K0','K1'],:]
Out[18]: 

    A  B
K0  1  1
K1  2  2