为了账号安全,请及时绑定邮箱和手机立即绑定

在具有相似但不精确值的列上连接数据框

在具有相似但不精确值的列上连接数据框

一只甜甜圈 2021-09-02 16:12:21
我有两个要加入到employee_id 的pandas 数据框。一个是 Employee_Logs,另一个是 HR_Data。Employee_Logs_dfemployee_id  action2325255b     login     51666164     login51666164v    loginr1211        logoffr18552421    loginHR_Data_dfemployee_id  name2325255      Rob    51666164     Tomr1211        Tammyr18552421    Ron我想加入他们,使数据看起来像这样:新建_dfemployee_id  action  name2325255b     login   Rob  51666164     login   Tom51666164v    login   Tomr1211        logoff  Tammyr18552421    login   Ron如果两个表上的employee_id 字段匹配,我可以进行简单的连接,但是同一用户可以在其雇员id 后面有一个“ b”或“ v”,以指定该帐户是否像管理员帐户一样被提升。一些用户帐户r在 id 前面有一个“ ”,但在两个表中都是这种情况。在 SQL 中,这给了我想要的结果:select el*,    coalesce(h.name, hv.name, hb.name) as namefrom employee_logs el left join    hr_data h    on el.employee_id = h.employee_id left join    hr_data hv    on el.employee_id = concat(h.employee_id, 'v') left join    hr_data hb    on el.employee_id = concat(h.employee_id, 'b');在 Python 中有什么好方法可以让我做一些 where 操作并创建一个新的 df?
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

您可以使用正则表达式从employee_idin 中删除尾随字母Employee_Logs_df,然后将其映射到您的姓名HR_Data_df:


new_df = Employee_Logs_df.assign(name = Employee_Logs_df.employee_id

                                 .str.extract('(.*\d+)',expand=False)

                                 .map(HR_Data_df.set_index('employee_id')['name']))


>>> new_df

  employee_id  action   name

0    2325255b   login    Rob

1    51666164   login    Tom

2   51666164v   login    Tom

3       r1211  logoff  Tammy

4   r18552421   login    Ron

如果你愿意,你可以用合并做一些非常相似的事情:


new_df = Employee_Logs_df.merge(HR_Data_df.set_index('employee_id'),

                                left_on=Employee_Logs_df.employee_id

                                .str.extract('(.*\d+)',expand=False),

                                right_index=True)


>>> new_df

  employee_id  action   name

0    2325255b   login    Rob

1    51666164   login    Tom

2   51666164v   login    Tom

3       r1211  logoff  Tammy

4   r18552421   login    Ron


查看完整回答
反对 回复 2021-09-02
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信