【问题标题】:Pandas Update dataframe with join on common columnPandas 更新数据框并在公共列上加入
【发布时间】:2019-08-19 13:30:16
【问题描述】:

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

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

我尝试了各种合并和加入的化身,但均未成功。不寻找循环,而是使用 Pandas

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'

注意,键 col 不是 pandas 索引而是普通列

所需的 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 的直接复制将不起作用,因为它会覆盖现有值。

【问题讨论】:

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


    【解决方案1】:

    试试这个。

    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)
    

    【讨论】:

      【解决方案2】:
      df1 = pd.merge(df1, df2)
      df1.drop('colc',axis=1,inplace=True)
      df1.rename(columns={'colz':'colc'}, inplace=True)
      

      【讨论】:

      • 谢谢,但您的解决方案将全面覆盖现有 df1 的 colc 值,而我只在键匹配时发生更新。我已经编辑了原始 dfs 以使其明确。
      猜你喜欢
      • 2013-09-18
      • 1970-01-01
      • 2014-10-10
      • 2017-05-18
      • 2023-03-13
      • 2017-09-03
      相关资源
      最近更新 更多