【问题标题】:Compare two dataframe and update a column in first dataframe比较两个数据帧并更新第一个数据帧中的列
【发布时间】:2019-06-23 19:08:24
【问题描述】:

我有两个数据框:df1df2df1 具有列 idnamedf2idfirstname。我想将df1 中的所有iddf2 中的id 进行比较,对于匹配项,我想用name 中的df1 中的name 列的值来更新/覆盖firstname 列。

我试过的代码是:

df1.loc[df1.id.isin(df2.id),[name]]= df2[[firstname]].values

【问题讨论】:

  • 您好,欢迎来到 SO。请阅读有关mcve 的内容。

标签: python python-3.x pandas


【解决方案1】:

您可以定义一个系列映射,然后使用pd.Series.map

id_name_map = df2.set_index('id')['firstname']
df1['name'] = df1['id'].map(id_name_map).fillna(df1['name'])

或者如果您需要反过来这样做:

id_name_map = df1.set_index('id')['name']
df2['firstname'] = df2['id'].map(id_name_map).fillna(df2['firstname'])

在每种情况下,我们都使用fillna 来确保不匹配的ids 不会导致名称被覆盖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多