如何用字典匹配DataFrame列值生成新列?含多值分隔场景
Pandas 基于字典快速映射新增列(含多值场景)
一、单值分类数据的高效映射
不用手动循环,Pandas内置的map()方法就是干这个的,一行代码就能完成映射,效率比手动遍历高很多。
示例代码:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ "项目名称": ["Project Alpha", "Project Beta", "Project Charlie", "Project Alpha", "Project Alpha"] }) # 定义映射字典 project_links = { "Project Alpha": "Link to Alpha", "Project Beta": "Link to Beta", "Project Charlie": "Link to Charlie" } # 新增列并完成映射 df["项目链接"] = df["项目名称"].map(project_links) print(df)
输出结果:
| 项目名称 | 项目链接 |
|---|---|
| Project Alpha | Link to Alpha |
| Project Beta | Link to Beta |
| Project Charlie | Link to Charlie |
| Project Alpha | Link to Alpha |
| Project Alpha | Link to Alpha |
二、处理逗号分隔的多值场景
如果单元格是逗号分隔的多个分类值,用apply()结合匿名函数就能搞定:先拆分字符串、逐个映射,最后合并结果。注意用strip()处理元素前后的空格,避免因为空格导致映射失败。
示例代码:
import pandas as pd # 构造含多值的DataFrame df_multi = pd.DataFrame({ "项目名称": ["Alpha,Beta,Gamma", "Project Alpha,Beta", "Charlie,Gamma"] }) # 定义包含所有可能值的映射字典 multi_links = { "Alpha": "Link to Alpha", "Beta": "Link to Beta", "Gamma": "Link to Gamma", "Project Alpha": "Link to Alpha", "Charlie": "Link to Charlie" } # 多值映射逻辑:拆分→去空格→映射→合并 df_multi["项目链接"] = df_multi["项目名称"].apply( lambda x: ', '.join([multi_links.get(item.strip(), "无对应链接") for item in x.split(',')]) ) print(df_multi)
输出结果:
| 项目名称 | 项目链接 |
|---|---|
| Alpha,Beta,Gamma | Link to Alpha, Link to Beta, Link to Gamma |
| Project Alpha,Beta | Link to Alpha, Link to Beta |
| Charlie,Gamma | Link to Charlie, Link to Gamma |
用get()方法是为了避免遇到字典里没有的键时报错,找不到对应值会返回"无对应链接",你可以根据需求修改这个默认值。
内容的提问来源于stack exchange,提问作者Ben Kluger
相关产品推荐
相关产品推荐

