我正在尝试将数据框A和B都与列“ id”进行比较,并在数据框A中创建一个新列,如果两个数据框的ID均匹配,则在数据框B中写入列“ description”的值。如果在数据框B中找不到ID,则将其留空“”。
B是比A小的数据帧。
现在,我创建了一个布尔列,告诉我是否在数据框B中找到了ID:
A["found_in_b"] = A["id_a"].isin(B['id_b'])
Pd:我尝试了一种将ID与Iteritems进行比较的方法,然后尝试保存“描述”值,但不会保存任何内容。 我尝试过的另一件事是:
A.loc[A.found_in_b > 0, 'description'] = B.description[B['id_b'].values == A["id_a"].values]
但是它也不起作用。我被困在这一点上,任何提取具有匹配ID的行的“描述”列的技巧或指导都将对我完成第一个数据项目有很大帮助。
答案 0 :(得分:1)
您可以使用左联接。
B_tmp = B[["id_b","description"]]
A = pd.merge(A, B_tmp, left_on="id_a", right_on="id_b", how="left")
当id_a中的值不在B数据帧中时,您将获得NaN值
答案 1 :(得分:1)
请举例说明您的问题。从以上问题来看,我认为左联接是您想要的。希望这会有所帮助:
"\\s*,\\s*"
df1 = pd.DataFrame({'id':[1,2,3,4,5,6,7,8], 'val': ['a','b','c','d','e','f','g','h']})
df2 = pd.DataFrame({'id':[1,3,4,6,8], 'val': ['a','c','d','f','e']})