如何用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
相关产品推荐
相关产品推荐

