我想合并两个数据框,df2
可能有更多列,并且始终为 1 行。我希望 df2
行中的数据覆盖 df
上 a
中的匹配行。
df = pd.DataFrame({'a': {0: 0, 1: 1, 2: 2}, 'b': {0: 3, 1: 4, 2: 5}})
df2 = pd.DataFrame({'a': {0: 1}, 'b': {0: 90}, 'c': {0: 76}})
>>> df
a b
0 0 3
1 1 4
2 2 5
>>> df2
a b c
0 1 90 76
所需的输出:
a b c
0 0 3 NaN
1 1 90 76
2 2 5 NaN
我尝试过向左合并,但这会创建两个 b 列(b_x
和 b_y
):
>>> pd.merge(df,df2,how='left', on='a')
a b_x b_y c
0 0 3 NaN NaN
1 1 4 90.0 76.0
2 2 5 NaN NaN
答案 0 :(得分:3)
您可以在此处使用 df.combine_first
:
df2.set_index("a").combine_first(df.set_index("a")).reset_index()
或合并:
out = df.merge(df2,on=['a'],how='left')
out.loc[:,out.columns.str.endswith("_x")] = out.loc[:,
out.columns.str.endswith("_y")].to_numpy()
out = out.groupby(out.columns.str.split("_").str[0],axis=1).first()
print(out)
a b c
0 0 3.0 NaN
1 1 90.0 76.0
2 2 5.0 NaN