You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python Pandas合并含多Role ID的用户表与角色表?

解决步骤与代码实现

1. 准备环境与示例数据

先导入Pandas,同时模拟你提到的两个DataFrame(新手可替换为自己的真实数据):

import pandas as pd

# 用户信息表(示例)
user_df = pd.DataFrame({
    "用户姓名": ["张三", "李四", "王五"],
    "Role ID": ["1,2", "3", "2,3,4"]
})

# 角色表(示例)
role_df = pd.DataFrame({
    "Role ID": ["1", "2", "3", "4"],
    "Role Name": ["管理员", "编辑", "审核员", "访客"]
})

2. 拆分多Role ID为单行记录

针对部分用户的逗号分隔多Role ID,先拆分成单独行,方便后续匹配角色名称:

# 拆分Role ID并保留用户姓名,用下划线区分原列避免冲突
user_expanded = user_df.assign(Role_ID=user_df["Role ID"].str.split(",")).explode("Role_ID")

3. 合并角色表匹配名称

用拆分后的Role_ID关联角色表,获取对应的角色名称:

# 按Role ID匹配,保留所有用户数据
merged = pd.merge(user_expanded, role_df, left_on="Role_ID", right_on="Role ID", how="left")

4. 聚合回原用户维度

将拆分的记录重新按用户聚合,合并多角色信息并统计数量:

# 按用户和原Role ID分组,聚合角色数量与名称
result_df = merged.groupby(["用户姓名", "Role ID"]).agg(
    角色数量=("Role Name", "count"),
    Role Name=("Role Name", ",".join)
).reset_index()

最终结果

运行后得到的result_df结构如下:

用户姓名 Role ID  角色数量     Role Name
0   张三    1,2      2     管理员,编辑
1   李四      3      1         审核员
2   王五  2,3,4      3  编辑,审核员,访客

关键提示

  • 若真实数据中Role ID是数值类型,需先转字符串再拆分:user_df["Role ID"] = user_df["Role ID"].astype(str)
  • explode()是处理逗号分隔多值的核心函数,能快速将列表拆分为单行
  • groupby().agg()通过count统计数量,",".join合并多角色名称为逗号分隔字符串

内容的提问来源于stack exchange,提问作者Danny Moulier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:11:03