如何从另一个数据框中提取具有相同ID的行的数据?

时间:2019-11-22 11:04:38

标签: python pandas dataframe

我正在尝试将数据框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的行的“描述”列的技巧或指导都将对我完成第一个数据项目有很大帮助。

2 个答案:

答案 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']})