2017-04-21 41 views
1

我有兩個表是這樣的:合併表

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 

,我需要加入他們的行列,所以我得到這樣的:

Table needed: 

id id2 value value2 
1  1  a  e 
1  2  b  e 
2  1  c  g 
3  1  d  h 

Excel或Python或R語言會工作。事實是我需要的是,如果表A中的ID與表B中的ID匹配,則表B中的值被添加到匹配行中。儘管如此,這兩個表的大小並不相同,有時候表b中存在ID不存在於表a中的ID。我只需要表格a中的那些。

回答

1

最快是使用map

df1['value2'] = df1['id'].map(df2.set_index('id')['value2']) 
print (df1) 
    id id2 value value2 
0 1 1  a  e 
1 1 2  b  e 
2 2 1  c  g 
3 3 1  d  h 

編輯:

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 only valid with uniquely valued Index objects

答溶液是刪除它們:與重複值

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  a  e 
1 1 2  b  e 
2 2 1  c  g 
3 3 1  d  h 

解和左連接:

df = pd.merge(df1, df2, on='id', how='left') 
print (df) 
    id id2 value value2 
0 1 1  a  e 
1 1 1  a  p 
2 1 2  b  e 
3 1 2  b  p 
4 2 1  c  g 
5 3 1  d  h 
+0

我得到以下錯誤:重新索引只有唯一價值指數的有效對象 –

+0

這意味着表2是重複的。 – jezrael

+0

是的,有重複的索引,我需要的是在這種情況下值重複。 –