如何根据不同的列名合并两个数据框

时间:2016-05-26 16:39:41

标签: python pandas

import pandas as pd

left = pd.DataFrame({'A': ['A1', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3'],
                     'C': ['K0', 'K1', 'K0', 'K1']})

right = pd.DataFrame({'AA': ['A1', 'A3'],
                      'BB': ['B0', 'B3'],
                      'CC': ['K0', 'K1'],
                      'DD': ['D0', 'D1']})

我想通过向DD添加列left来加入这两个数据框。应根据比较DDAAABBBC来选择CC的值。

简单的连接案例如下所示,但在我的情况下,我需要比较具有不同名称的列,然后我只想将DD添加到right

result = left.join(right, on='DD')

结果应为:

result = pd.DataFrame({'A': ['A1', 'A1', 'A2', 'A3'],
                       'B': ['B0', 'B1', 'B2', 'B3'],
                       'C': ['K0', 'K1', 'K0', 'K1'],
                       'DD': ['D0', NaN, NaN, 'D1']})

2 个答案:

答案 0 :(得分:2)

使用带有mergeleft_on参数的pandas right_on方法。

left.merge(right, how='left',
          left_on=['A', 'B', 'C'],
          right_on=['AA', 'BB', 'CC'])[['A', 'B', 'C', 'DD']]

得到你:

    A   B   C   DD
0  A1  B0  K0   D0
1  A1  B1  K1  NaN
2  A2  B2  K0  NaN
3  A3  B3  K1   D1

答案 1 :(得分:1)

看起来你想要merge

但目前列名称不匹配(A是right中的AA) 首先让我们将它们标准化:

In [11]: right.columns = right.columns.map(lambda x: x[0])

然后我们可以合并共享列:

In [12]: left.merge(right)
Out[12]:
    A   B   C   D
0  A1  B0  K0  D0
1  A3  B3  K1  D1

In [13]: left.merge(right, how="outer")
Out[13]:
    A   B   C    D
0  A1  B0  K0   D0
1  A1  B1  K1  NaN
2  A2  B2  K0  NaN
3  A3  B3  K1   D1