我有一个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),但我们可以保留原始排序吗?
答案 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)