df1 = pd.DataFrame([(1,5),(2,10),(3,15)],columns=["2009","2008"],index=["C","A","B"])
2009 2008
C 1 5
A 2 10
B 3 15
df2 = pd.DataFrame([(5,7),(11,14),(14,15)],columns=["2008","2007"],index=["D","B","C"])
2008 2007
D 5 7
B 11 14
C 14 15
desired_output =
2009 2008 2007
C 1 5 15
A 2 10 na
B 3 15 14
D na 5 7
我知道组合两个数据框的主要方法有四种:联接,合并,附加,连接和连接,我已经尝试了多种方法来实现它们,但我似乎无法成功。
df1.merge(df2,how="outer",left_index=True,right_index=True,on="2008")
2009 2008 2007
A 2.0 10 NaN
B 3.0 15 14.0
C 1.0 5 15.0
D NaN 5 7.0
是我能找到的最接近的-但必须重新选择各列。我希望所有相交的索引都以df1的原始顺序排在首位,然后再添加任何非相交的索引(最好也是df2的顺序)
有什么帮助吗?
答案 0 :(得分:3)
您可以将pd.Index.difference
与DataFrame.append
结合使用,以保持索引和列的顺序。
idx = df2.index.difference(df1.index)
df1.append(df2.loc[idx]).fillna(df2)
2009 2008 2007
C 1.0 5 15.0
A 2.0 10 NaN
B 3.0 15 14.0
D NaN 5 7.0
答案 1 :(得分:2)
尝试使用reindex
的{{3}}和使用union
的{{1}}列索引:
sort=False
输出:
df1.combine_first(df2).reindex(df1.columns.union(df2.columns, sort=False), axis=1)