合并将较小的数据框替换为较大的数据框

Merge with replacement of smaller dataframe to larger dataframe

我有两个如下所示的 DataFrame:

DF1:

index  colA colB
 id1    0     0
 id2    0     0
 id3    0     0
 id4    0     0
 id5    0     0

DF2:

index  colA   colB
  id3    A3     B3
  id4    A4     B4
  id6    A6     B6

我想注入从 DF2DF1 的值。我试图合并,但它不会替换值并创建更新的列。我想要的结果 DataFrame 应该是这样的:

DF1:

index  colA  colB
  id1     0     0
  id2     0     0
  id3    A3    B3
  id4    A4    B4
  id5     0     0
  id6    A6    B6

注意:如果 DF2 有一些 DF1 中不存在的索引,它应该在 DF1 中创建一个新索引。此外,列 index 是数据帧的索引,而不是列名。

这是使用 concat + drop_duplicates 的一种方法:

out = pd.concat((df1, df2)).reset_index().drop_duplicates(subset=['index'], keep='last').set_index('index').sort_index()

或使用reindex + update:

df1 = df1.reindex(df1.index.union(df2.index))
df1.update(df2)

输出:

  index colA colB
0   id1    0    0
1   id2    0    0
0   id3   A3   B3
1   id4   A4   B4
4   id5    0    0
2   id6   A6   B6

你可以试试combine_first

df1 = df1.set_index('index')
df2 = df2.set_index('index')
out = df2.combine_first(df1)
Out[217]: 
      colA colB
index          
id1    0.0  0.0
id2    0.0  0.0
id3     A3   B3
id4     A4   B4
id5    0.0  0.0
id6     A6   B6