【问题标题】:Merge dataframes, add/update field合并数据框,添加/更新字段
【发布时间】:2018-11-08 12:24:30
【问题描述】:

我正在尝试在 person_id 上使用pandas 合并/加入两个数据框。 如果找到匹配项,则应添加或更新电子邮件字段。 它不应该创建新行,在 Table_A 中存在 dosnt。

表_A

+-----------+-----------------+------+
| person_id |      email      | lang |
+-----------+-----------------+------+
|         1 |                 | EN   |
|         2 | tes2@foo.com    | FR   |
|         3 | tes3@barbar.com | DK   |
+-----------+-----------------+------+

表_B

+-----------+--------------+------+
| person_id |    email     | kids |
+-----------+--------------+------+
|         1 | tes1@foo.com |    2 |
|         2 | tes2@foo.com |    0 |
|         3 | tes3@foo.com |    0 |
|         4 | tes4@foo.com |    1 |
+-----------+--------------+------+

我要找的结果是

+-----------+--------------+------+------+
| person_id |    email     | kids | lang |
+-----------+--------------+------+------+
|         1 | tes1@foo.com |    2 | EN   |
|         2 | tes2@foo.com |    0 | FR   |
|         3 | tes3@foo.com |    0 | DK   |
|         4 | tes5@foo.com |    1 |      |
+-----------+--------------+------+------+

我试过了

df_merged=pd.merge(Table_A,Table_B,on=["person_id"], how="left")

这为我提供了正确的字段,但也提供了 email_x 和 email_y 字段。我只想要一个电子邮件字段。

【问题讨论】:

  • 我认为你必须使用.join

标签: python python-3.x pandas merge


【解决方案1】:

这里有一些临时解决方案...

合并两个数据框并添加后缀。

dfNew = df.merge(df1, left_index=True, right_index=True,how='outer', suffixes=('_y', ''))

     #result
     person_id_y       email_y  lang  person_id         email   kids
            1             None   EN         1    tes1@foo.com     2
            2     tes2@foo.bar   FR         2    tes2@foo.com     0
            3  tes2@barbar.com   DK         3    tes3@foo.com     0
          NaN              NaN  NaN         4    tes4@foo.com     1

然后只过滤你想要的列

dfNew = dfNew[['person_id','email','kids','lang']]

person_id         email  kids lang
        1  tes1@foo.com     2   EN
        2  tes2@foo.com     0   FR
        3  tes3@foo.com     0   DK
        4  tes4@foo.com     1  NaN

【讨论】:

    猜你喜欢
    • 2018-08-26
    • 2021-04-12
    • 2015-04-17
    • 2021-06-26
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多