【问题标题】:Update one dataframe value with another dataframe column value based on the condition根据条件用另一个数据框列值更新一个数据框值
【发布时间】:2019-10-14 18:03:33
【问题描述】:

我有两个数据框,例如 df1df2

df1:

id code remarks
1   a12  
2   b32  
3   c12

df2:

id code remarks
1   aaa12  ok
2   b32    done
3   ccc12  not ok

我想根据idcodedf1 备注值更新为df2 备注值。

这里的第二个值匹配 (id-2 , code-b32),因此使用 df1 备注列更新备注“完成”的值。

df1 的最终结果如下所示,

df1:

id code remarks
1   a12  
2   b32  done
3   c12

到目前为止,我尝试如下,我知道这是不正确的,但我需要这样的东西

df1_key = df1['id'].astype(str) + df1['code'].astype(str)
df2_key = df2['id'].astype(str) + df2['code'].astype(str)

df['flag'] = df1_key.isin(df2_key, df1['remarks']=df2['remarks'])

根据this 的说法,我也尝试了以下方法,但对我不起作用。

 df3 = df1.merge(df2[['remarks']], on=['id','code'], how='left')

【问题讨论】:

  • @jezrael ;我已经更新了这个问题。请通过它。

标签: python pandas dataframe


【解决方案1】:

DataFrame.merge 与按列表过滤的列一起使用:

df3 = df1[['id','code']].merge(df2, on=['id','code'], how='left')

DataFrame.drop:

df3 = df1.drop('remarks', axis=1).merge(df2, on=['id','code'], how='left')

print (df3)
   id code remarks
0   1  a12     NaN
1   2  b32    done
2   3  c12     NaN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 2018-12-29
    • 1970-01-01
    相关资源
    最近更新 更多