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

Python Pandas中将逗号分隔ID按映射表替换为对应值的实现方法

Pythonic 风格的 Pandas 实现方案

以下是两种常用的实现方式,分别适配不同的数据量场景:


1. 小数据量场景:简洁写法

核心逻辑是先将映射表转为字典,再对拆分后的ID列表做逐元素映射后拼接,可读性极高。

import pandas as pd

# ---------------------- 示例数据构造 ----------------------
# 原表,id_str列为逗号分隔的ID字符串
df = pd.DataFrame({
    "业务列": ["示例1", "示例2", "示例3"],
    "id_str": ["1,2,3", "2,4", "1,3,5"]
})
# ID映射表
mapping_df = pd.DataFrame({
    "id": ["1", "2", "3", "4"],
    "name": ["项目A", "项目B", "项目C", "项目D"]
})

# ---------------------- 核心实现 ----------------------
# 1. 构建ID到名称的映射字典,保证ID类型和拆分后的ID类型一致(避免int/str类型不匹配导致映射失败)
id_to_name = mapping_df.set_index("id")["name"].to_dict()

# 2. 拆分ID列、映射、拼接
df["name_str"] = df["id_str"].str.split(",") \
    .apply(lambda ids: ",".join([id_to_name.get(id_, f"未匹配:{id_}") for id_ in ids]))

dict.get() 方法用于处理未匹配到的ID,避免抛出KeyError,不需要可以直接写id_to_name[id_]


2. 大数据量场景:高性能向量化写法

避免apply的循环开销,用explode + 向量化映射 + 分组聚合实现,性能提升可达数倍到数十倍。

# 拆分ID到单独行
df_explode = df.assign(id=df["id_str"].str.split(",")).explode("id", ignore_index=False)
# 向量化映射
df_explode["name"] = df_explode["id"].map(id_to_name)
# 按原索引分组聚合,拼接名称
df = df_explode.groupby(level=0).agg(
    业务列=("业务列", "first"),
    id_str=("id_str", "first"),
    name_str=("name", ",".join)
).reset_index(drop=True)

内容的提问来源于stack exchange,提问作者Sriram Arvind Lakshmanakumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:15:03