合并/组合Pandas中的数据帧

时间:2018-03-26 14:21:37

标签: python pandas dataframe append concatenation

我有一个df1,例如:

     B    A    C
B         1
A              1
C    2

和df2,例如:

    C    E    D
C        2    3
E             1
D   2

列和行“C”在两个数据帧中都很常见。

我想结合这些数据框,以便我得到,

    B    A    C    D    E
B        1
A             1
C   2              2    3
D                       1
E   2  

有一种简单的方法吗? pd.concat和pd.append似乎不起作用。谢谢!

编辑:df1.combine_first(df2)有效(感谢@jezarel),但我们可以保留原始排序吗?

1 个答案:

答案 0 :(得分:2)

问题combine_first总是对列namd索引进行排序,因此需要reindex组合列名称:

idx = df1.columns.append(df2.columns).unique()
print (idx)
Index(['B', 'A', 'C', 'E', 'D'], dtype='object')

df = df1.combine_first(df2).reindex(index=idx, columns=idx)
print (df)
     B    A    C    E    D
B  NaN  1.0  NaN  NaN  NaN
A  NaN  NaN  1.0  NaN  NaN
C  2.0  NaN  NaN  2.0  3.0
E  NaN  NaN  NaN  NaN  1.0
D  NaN  NaN  2.0  NaN  NaN

更一般的解决方案:

c = df1.columns.append(df2.columns).unique()
i = df1.index.append(df2.index).unique()

df = df1.combine_first(df2).reindex(index=i, columns=c)