熊猫合并而不会覆盖

Dav*_*roy 1 merge dataframe pandas

我有两个数据框。我正在尝试将数据从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)

Run Code Online (Sandbox Code Playgroud)

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

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

Run Code Online (Sandbox Code Playgroud)

预期结果:

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

Run Code Online (Sandbox Code Playgroud)

And*_* L. 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   
Run Code Online (Sandbox Code Playgroud)

注意:此答案基于您的样本数据,其中df1index或是value的子集df2。您没有提到index,所以我假设它是default rangeindex。如果指数不rangeindex,你需要set_indexvalue

df2 = df2.set_index('Value')
df2.update(df1.set_index('Value'))
df2 = df2.reset_index()
Run Code Online (Sandbox Code Playgroud)