【问题标题】:Merging pandas columns (one-to-many)合并 pandas 列(一对多)
【发布时间】:2017-12-04 04:15:44
【问题描述】:

我是 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

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

干杯, 安迪

【问题讨论】:

  • 如果我的回答对您有帮助,请不要忘记accept - 单击答案旁边的复选标记 () 将其从灰色切换为已填充。谢谢。跨度>

标签: python excel pandas


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2019-10-19
    • 2016-01-10
    • 1970-01-01
    • 2022-07-21
    相关资源
    最近更新 更多