合并pandas列(一对多)

13

我对Python的Pandas不熟悉,想要通过共同的ID将多个Excel表格合并。此外,这里有一个一对多的关系。

以下是输入:

df1:

ID Name
3763058 Andi
3763077 Mark

df2:

ID Tag
3763058 item1
3763058 item2
3763058 item3
3763077 item4
3763077 item5
3763077 item6

现在,我想将两个Pandas数据框df1和df2合并成以下输出(标签列已按ID合并为一列):

ID Name Tag
3763058 Andi item1,item2,item3
3763077 Mark item4,item5,item6

请问有人可以帮我解决这个问题吗?

谢谢, Andi

1个回答

16

您可以使用 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

如果 df1 具有更多列,则可以使用merge,特别是在这种情况下使用:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接