合并熊猫列(一对多)

And*_*ier 2 python excel pandas

我是python熊猫的新手,在其中我要通过一个公共ID合并多个Excel工作表。此外,存在一对多关系。

这是输入:

df1

<b>ID       Name</b><br/>
3763058 Andi<br/>
3763077 Mark
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

<b>ID   Name    Tag</b><br/>
3763058 Andi    item1, item2, item3<br/>
3763077 Mark    item_4, item_5, item_6<br/>
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

干杯,安迪

jez*_*ael 5

您可以先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
Run Code Online (Sandbox Code Playgroud)

然后可以使用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
Run Code Online (Sandbox Code Playgroud)

解决方案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
Run Code Online (Sandbox Code Playgroud)

如果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
Run Code Online (Sandbox Code Playgroud)