2017-06-30 220 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