使用非唯一值在Python上合并Python中的两个数据框

时间:2017-08-06 13:53:22

标签: python pandas dataframe merge

我正在尝试根据列' X'在Python中合并两个数据帧。

左侧数据框中的列X具有非唯一值,右侧数据框中的列X具有唯一值。如何将右侧数据框中的值合并到左侧数据框中?

我想将df2中的行合并到df1中以形成df3

df1 = pd.DataFrame({'A': ['NA','EU','LA','ME'],
                    'B': [50, 23,21,100],
                    'X': ['IW233', 'IW455', 'IW455', 'IW100']})

df2 = pd.DataFrame({'C': [50, 12, 12, 11, 10, 16],
                    'X': ['IW455', 'IW200', 'IW233', 'IW150', 'IW175', 'IW100'],
                    'D': ['Aug', 'Sep', 'Jan', 'Feb', 'Dec', 'Nov']})

DF3:1

2 个答案:

答案 0 :(得分:3)

您可以将merge与左连接一起使用,如果只有X加入列on参数可以省略:

df = pd.merge(df1, df2, how='left')
print (df)
    A    B      X   C    D
0  NA   50  IW233  12  Jan
1  EU   23  IW455  50  Aug
2  LA   21  IW455  50  Aug
3  ME  100  IW100  16  Nov

如果有多个相同的列名称:

df = pd.merge(df1, df2, on='X', how='left')
print (df)
    A    B      X   C    D
0  NA   50  IW233  12  Jan
1  EU   23  IW455  50  Aug
2  LA   21  IW455  50  Aug
3  ME  100  IW100  16  Nov

答案 1 :(得分:0)

您可以在此处使用join运算符:

>>> df1.join(df2.set_index('X'),on='X')
    A    B      X   C    D
0  NA   50  IW233  12  Jan
1  EU   23  IW455  50  Aug
2  LA   21  IW455  50  Aug
3  ME  100  IW100  16  Nov

所以我们首先将右边框的索引更改为X(因为这些在右边框架上是唯一的,这不是问题)。然后我们在X列上执行联接。