熊猫:合并两个 1D 数据帧,输出具有唯一元素填充值的两列



我有两个数据帧:

import pandas as pd
df1 = pd.DataFrame({'A':[1,2,4,6]})
df2 = pd.DataFrame({'A':[1,2,3,6]})

df1
Out[27]: 
   A
0  1
1  2
2  4
3  6
df2
Out[28]: 
   A
0  1
1  2
2  3
3  6

我想以保留两列的方式合并它们,连接公共值而不考虑它们的索引,唯一值保留在另一行中的填充值,也就是说,我想要这个结果:

   A_x  A_y
0  1.0  1.0
1  2.0  2.0
2  NaN  3.0
3  4.0  NaN
4  6.0  6.0

我试过了

pd.merge(df1,df2,on=['A'],how='outer')
pd.concat([df1,df2],axis=1,join='outer')

但这两个并没有产生预期的结果。我已经尝试过不同的选择,但没有运气。

我还研究了其他方法,如appendassign,但似乎没有一种方法提供执行此操作的功能。

我觉得这是一个常见的操作,应该有一个简单的直接解决方案,所以我可能会忽略一些明显的东西。

你能告诉我它是如何正确完成的吗?

具有按 index 连接值的concat的解决方案,因此需要set_index

df = pd.concat([df1.set_index('A', drop=False).A,
                df2.set_index('A', drop=False).A],
                axis=1, 
                keys=('A_x','A_y')).reset_index(drop=True)
print (df)
   A_x  A_y
0  1.0  1.0
1  2.0  2.0
2  NaN  3.0
3  4.0  NaN
4  6.0  6.0
df2 = df2.set_index('A', drop=False)
kws = dict(on='A', lsuffix='_x', rsuffix='_y', how='outer')
df1.join(df2, **kws).drop('A', 1)
   A_x  A_y
0  1.0  1.0
1  2.0  2.0
2  4.0  NaN
3  6.0  6.0
3  NaN  3.0

最新更新