2017-06-30 51 views
1

我是新來的python熊貓,我想用一個公共ID組合多個Excel工作表。此外,它是一個一對多的關係。合併大熊貓列(一對多)

這裏是輸入:

DF1

<b>ID  Name</b><br/> 
3763058 Andi<br/> 
3763077 Mark 

DF2:

<b>ID Tag</b><br/> 
3763058 item1 <br/> 
3763058 item2<br/> 
3763058 item3<br/> 
3763077 item_4<br/> 
3763077 item_5<br/> 
3763077 item_6 

我現在想的數據幀DF1和DF2合併這兩個大熊貓成以下輸出(列標記合併到每個ID的單個列中):

<b>ID Name Tag</b><br/> 
3763058 Andi item1, item2, item3<br/> 
3763077 Mark item_4, item_5, item_6<br/> 

請問有誰能幫我解決這個問題?

乾杯, 安迪

+0

如果我的回答對您有所幫助,不要忘了[接受](http://meta.stackexchange.com/a/5235/ 295067) - 點擊答案旁邊的複選標記('✓')將其從灰色變爲填充。謝謝。 – jezrael

回答

2

您可以先用groupbyjoin

df2 = df2.groupby('ID')['Tag'].apply(', '.join).reset_index() 
print (df2) 
     ID      Tag 
0 3763058  item1, item2, item3 
1 3763077 item_4, item_5, item_6 

然後可以使用merge,特別是如果df1有更多的列:

df = pd.merge(df1, df2, on='ID', how='left') 
print (df) 
     ID Name      Tag 
0 3763058 Andi  item1, item2, item3 
1 3763077 Mark item_4, item_5, item_6 

解決方案與map如果需要只添加一列:

df2 = df2.groupby('ID')['Tag'].apply(', '.join).reset_index() 
df2['Name'] = df2['ID'].map(df1.set_index('ID')['Name']) 
print (df2) 
     ID      Tag Name 
0 3763058  item1, item2, item3 Andi 
1 3763077 item_4, item_5, item_6 Mark 

如果Name列的重要位置使用insert

df2 = df2.groupby('ID')['Tag'].apply(', '.join).reset_index() 
df2.insert(1, 'Name', df2['ID'].map(df1.set_index('ID')['Name'])) 
print (df2) 
     ID Name      Tag 
0 3763058 Andi  item1, item2, item3 
1 3763077 Mark item_4, item_5, item_6