合并大pandas列(一对多)

我是新的Python大pandas,我想通过一个共同的ID结合几个Excel工作表。 此外,这是一个一对多的关系。

这里是input:

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 

现在,我想将两个pandasdataframedf1和df2合并到以下输出中(列标记合并在每个ID的单个列中):

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

有人可以帮我吗?

干杯,安迪

你可以使用第一个groupby join

 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