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

创建一个新列取决于两个不同数据框中的列中的匹配字符串

创建一个新列取决于两个不同数据框中的列中的匹配字符串

茅侃侃 2022-07-05 15:41:09
我有两个数据框 A 和 B,如果名称存在于数据集中,我想在两个数据框中的名称列之间进行匹配 BI 需要在数据集 A 中使用数据集 B 的 ID 创建一个新列(如果不存在)返回 0这是我写的代码#data B    email              name        id    hi@amal.com       amal call     6    hi@hotmail.com      amal        6    hi@gmail.com        AMAL boy    6    hi@boy.com          boy         7    hi@hotmail.com      boy         7    hi@call.com     call AMAL       9    hi@hotmail.com      boy         7    hi@dog.com          dog         8    hi@outlook.com      dog         8    hi@gmail.com        dog         8#data A    id  name    1   amal    1   AMAL    2   call    4   dog    3   boy首先我创建包含函数A.name.str.contains('|'.join(B.name))然后我尝试创建一个列A["new"] = np.where(A.name.str.contains('|'.join(B.name))==True, B.id, 0)但我得到这个错误ValueError: operands could not be broadcast together with shapes (5,) (10,) ()我所期望的是    id  name  new    1   amal  6    1   AMAL  0    2   call  0    4   dog   7    3   boy   8有什么帮助吗?
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

由 Series使用Series.map,通过 删除重复行DataFrame.drop_duplicates,然后用 替换缺失值Series.fillna并转换为整数:


A["new"] = A.name.map(B.drop_duplicates('name').set_index('name')['id']).fillna(0).astype(int)

print (A)

   id  name  new

0   1  amal    6

1   1  AMAL    0

2   2  call    0

3   4   dog    8

4   3   boy    7


查看完整回答
反对 回复 2022-07-05
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

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