熊猫左合并但用正确的数据覆盖

时间:2021-03-24 16:34:39

标签: python python-3.x pandas dataframe

我想合并两个数据框,df2 可能有更多列,并且始终为 1 行。我希望 df2 行中的数据覆盖 dfa 中的匹配行。

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_xb_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

1 个答案:

答案 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