我是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/>
有人可以帮帮我吗?
干杯, 岸堤
答案 0 :(得分:3)
您可以先使用join
使用groupby
:
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