按列Python合并不同大小的表

我有两个这样的表格:

Table A: id id2 value 1 1 a 1 2 b 2 1 c 3 1 d Table B: id value2 1 e 2 g 3 h 

我需要join他们,所以我得到这样的事情:

 Table needed: id id2 value value2 1 1 ae 1 2 be 2 1 cg 3 1 dh 

Excel或Python或R将工作。 事实是,我需要,如果表A中的ID匹配表B中的,表B中的值被添加到匹配行(S)。 尽pipe如此,两个表的大小都不一样,有时候表b中的id也不存在于表a中。 我只需要表格a中的那个。

最快的是使用map

 df1['value2'] = df1['id'].map(df2.set_index('id')['value2']) print (df1) id id2 value value2 0 1 1 ae 1 1 2 be 2 2 1 cg 3 3 1 dh 

编辑:

 print (df2) id value2 0 1 e 1 1 p 2 2 g 3 3 h df1['value2'] = df1['id'].map(df2.set_index('id')['value2']) print (df1) 

InvalidIndexError:Reindexing只对唯一赋值的索引对象有效

Ans解决scheme是删除它们:

 print (df2) id value2 0 1 e 1 1 p 2 2 g 3 3 h df2 = df2.drop_duplicates(subset='id') print (df2) id value2 0 1 e 2 2 g 3 3 h df1['value2'] = df1['id'].map(df2.set_index('id')['value2']) print (df1) id id2 value value2 0 1 1 ae 1 1 2 be 2 2 1 cg 3 3 1 dh 

带有merge和左连接重复值的解决scheme:

 df = pd.merge(df1, df2, on='id', how='left') print (df) id id2 value value2 0 1 1 ae 1 1 1 ap 2 1 2 be 3 1 2 bp 4 2 1 cg 5 3 1 dh