合并熊猫数据框-保留原始顺序并覆盖列

时间:2020-07-22 15:36:20

标签: python pandas

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的顺序)

有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

您可以将pd.Index.differenceDataFrame.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)