我有两个数据框 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
添加回答
举报
0/150
提交
取消