猿问

合并数据帧,添加/更新字段

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


表_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 字段。我只想要一个电子邮件字段。


胡子哥哥
浏览 171回答 1
1回答

阿晨1998

这是一个临时解决方案......合并两个数据帧并添加后缀。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
随时随地看视频慕课网APP

相关分类

Python
我要回答