我正在尝试加入2个数据框。我将在下面解释使用我的代码。抱歉,我不知道如何显示表格输出,因此请运行代码,您将明白我的意思。
设置:
df1 = pd.DataFrame({'A': ['A2', 'A3', 'A6', 'A7'],
'B': ['B2', 'B3', 'B6', 'B7'],
'C': ['C2', 'C3', 'C6', 'C7']})
df2 = pd.DataFrame({'A_': ['A2', 'A3', 'A4'],
'B_': ['B2', 'B3', 'B4'],
'C_': ['C2', 'C3', 'C4']})
我尝试了以下方法:
new_joined = pd.concat([df1, df2],axis=1,join='outer')
输出不是我想要的。我想要的是像这样的加入的df:
joined = pd.DataFrame({'A': ['A2', 'A3', 'A6', 'Nan','A7'],
'B': ['B2', 'B3', 'B6','Nan','B7'],
'C': ['C2', 'C3', 'C6','Nan','C7'],
'A_': ['A2', 'A3', 'Nan','A4','Nan'],
'B_': ['B2', 'B3', 'Nan','B4','Nan'],
'C_': ['C2', 'C3', 'Nan','C4','Nan']})
joined = joined[['A','B','C','A_','B_','C_']]
基本上,如果一行df1与另一行df2不匹配,我希望它是Nan,但是我尝试过的函数只是将[A6,B6,C6]和[A4,B4,C4 ]在同一行上。请指教!
答案 0 :(得分:2)
pd.concat
不起作用,因为它在索引(行或列)上而不是在任意列上对齐。您可能正在寻找merge
形式,
df1.merge(df2,left_on=['A','B','C'],right_on=['A_','B_','C_'],how='outer')
答案 1 :(得分:0)
我认为这与this question有关。您正在寻找full outer join。使用您的示例,这里是解决方法:
df1 = pd.DataFrame({'A': ['A2', 'A3', 'A6', 'A7'],
'B': ['B2', 'B3', 'B6', 'B7'],
'C': ['C2', 'C3', 'C6', 'C7']})
df2 = pd.DataFrame({'A_': ['A2', 'A3', 'A4'],
'B_': ['B2', 'B3', 'B4'],
'C_': ['C2', 'C3', 'C4']})
df1.merge(df2, how='outer', left_on=list(df1.columns), right_on=list(df2.columns))
输出
A B C A_ B_ C_
0 A2 B2 C2 A2 B2 C2
1 A3 B3 C3 A3 B3 C3
2 A6 B6 C6 NaN NaN NaN
3 A7 B7 C7 NaN NaN NaN
4 NaN NaN NaN A4 B4 C4