如何合并这两个DataFrame

时间:2017-03-01 12:39:48

标签: python mysql pandas

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

首先我要创建一个仅包含K0,K1

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

然后我想创建一个只包含K2,K3的DataFrame

#Expectation df
    A   B   key
0   3   3   K2
0   4   4   K3

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

2 个答案:

答案 0 :(得分:4)

使用isin构建一个布尔掩码:

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

然后使用.loc[mask]根据掩码选择行:

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]

产量

In [88]: first
Out[88]: 
   A  B key
0  1  1  K0
1  2  2  K1

In [89]: second
Out[89]: 
   A  B key
2  3  3  K2
3  4  4  K3

答案 1 :(得分:0)

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

left.set_index('key',inplace=True)
right.set_index('key',inplace=True)

然后当您在pandas中合并或连接两个DataFrame时,您希望使用pd.concat http://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html,这是方法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

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

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