通过公共列上的联接更新熊猫数据框

时间:2019-08-19 13:30:16

标签: python-3.x pandas sql-update

我有df1(key_col,cola,colb,colc)和df2(key_col,colz),我想做以下SQL等效项:

UPDATE df1
SET df1.colc = df2.colz
WHERE df1.key = df2.key

我尝试了各种合并和联接的方式,但均未成功。不是寻找循环,而是使用熊猫

df1: key_col  cola  colb  colc
     50       'foo' 'bar' 'foo'
     49       'foo' 'bar' 'bla'
     23       'bar' 'foo' 'bla'

df2: key_col  colz
     23      'something'
     50      'something else'

请注意,关键列不是熊猫索引,而是普通列

期望得到的df1:

df1: key_col  cola  colb  colc
     50   'foo' 'bar' 'something else'
     49   'foo' 'bar' 'bla'
     23   'bar' 'foo' 'something'

编辑:

添加了key_col = 49行以表明colc c的直接复制将不起作用,因为它将覆盖现有值。

2 个答案:

答案 0 :(得分:2)

尝试一下。

df1.set_index('Key',inplace=True)
df2.set_index('Key',inplace=True)
df2.rename(columns={'colz':'colc'}, inplace=True)
df1.update(df2)
df1.reset_index(inplace=True)

答案 1 :(得分:1)

df1 = pd.merge(df1, df2)
df1.drop('colc',axis=1,inplace=True)
df1.rename(columns={'colz':'colc'}, inplace=True)