猿问

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

我有两个数据框 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


有什么帮助吗?


茅侃侃
浏览 119回答 1
1回答

千万里不及你

由 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  new0   1  amal    61   1  AMAL    02   2  call    03   4   dog    84   3   boy    7
随时随地看视频慕课网APP

相关分类

Python
我要回答