1

我有两个数据框。我正在尝试将数据从 DF1 合并到 DF2,而不更改 DF2 中任何先前存在的数据。

DF1 = 
Value    Color
0         Red
1         White
2         Blue

DF2 = 
Value    Color
0         
1         
2         Brown
3         Black
4         White
5         

DF3 = pd.merge(DF2, DF1, on="Value", how='left', suffixes=('_x', '')).drop(['Color_x'], axis=1)

当前结果:它会覆盖已经存在的数据。例如,它正确地将棕色覆盖为蓝色。但是,它也会删除黑色和白色,因为 DF1 中不存在这些值。我希望它只是合并或覆盖我们要合并的值匹配的位置。

DF3 = 
Value    Color
0         Red
1         White
2         Blue
3         
4         
5         

预期结果:

DF3 = 
Value    Color
0         Red
1         White
2         Blue
3         Black
4         White
5         

4

2 回答 2

5

你找update

df2.update(df1)

print(df2)

Out[253]:
   Value  Color
0  0.0    Red
1  1.0    White
2  2.0    Blue
3  3.0    Black
4  4.0    White
5  5.0   

注意:此答案基于您的示例数据,其中df1index 或valuedf2. 你没有提到索引,所以我认为它是 default rangeindex。如果索引不是范围索引,则set_index需要value

df2 = df2.set_index('Value')
df2.update(df1.set_index('Value'))
df2 = df2.reset_index()
于 2019-10-14T15:58:39.380 回答
2

我们可以使用combine_first

df1.set_index('Value').combine_first(df2.set_index('Value')).reset_index()
   Value  Color
0      0    Red
1      1  White
2      2   Blue
3      3  Black
4      4  White
5      5    NaN
于 2019-10-14T15:57:33.550 回答