我有兩個(gè)數(shù)據(jù)框 A 和 B,如果名稱存在于數(shù)據(jù)集中,我想在兩個(gè)數(shù)據(jù)框中的名稱列之間進(jìn)行匹配 BI 需要在數(shù)據(jù)集 A 中使用數(shù)據(jù)集 B 的 ID 創(chuàng)建一個(gè)新列(如果不存在)返回 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首先我創(chuàng)建包含函數(shù)A.name.str.contains('|'.join(B.name))然后我嘗試創(chuàng)建一個(gè)列A["new"] = np.where(A.name.str.contains('|'.join(B.name))==True, B.id, 0)但我得到這個(gè)錯(cuò)誤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貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
由 Series使用Series.map,通過 刪除重復(fù)行DataFrame.drop_duplicates,然后用 替換缺失值Series.fillna并轉(zhuǎn)換為整數(shù):
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
添加回答
舉報(bào)
0/150
提交
取消
