合并pandas列(一对多)

2024-09-25 18:22:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python pandas的新手,我想用一个公共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

我现在要将两个pandas数据帧df1和df2合并到以下输出中(列标记合并到每个ID的一个列中):

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

有人能帮我一下吗?

干杯, 安迪


Tags: namebridpandastagitemexceldf1
1条回答
网友
1楼 · 发布于 2024-09-25 18:22:25

第一个^{}可以与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

那么可以使用^{},特别是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

使用^{}的解决方案,如果需要,只添加一列:

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列的重要位置使用^{}

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

相关问题 更多 >