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

如何在DataFrame列中匹配字典键并映射对应值?

问题与解决方案

问题背景

现有DataFrame df1:

|id|   domains| name|
| 1|      life|  xyz|
| 2|      life|  hyu|
| 3|vkontakete|  jik|

以及映射字典:

domain_dict = { 
    "tassagency": "TACC",
    "life": "LIFE.ru",
    "ria": "RIA | Taza", 
    "nws_ru" : "NEWS.ru | Новости",
    "mash" :"Mash | Мэш"
}

需要实现:将df1的domains列值与domain_dict的键匹配,匹配成功则把对应字典值放入新列vk_dom;不匹配则保留domains列原数值,最终期望输出:

|id|   domains| name|     vk_dom|
| 1|      life|  xyz|    LIFE.ru|
| 2|      life|  hyu|    LIFE.ru|
| 3|vkontakete|  jik| vkontakete|

原代码的问题

你尝试的循环写法存在两个关键错误:

  1. 内层循环重复使用变量i,覆盖了外层循环的DataFrame索引值,导致逻辑混乱;
  2. 内层循环中,只要遇到一个不匹配的字典键,就会把vk_dom重置为原domains值,哪怕之前已经匹配成功,最终会被最后一次不匹配的赋值覆盖。

正确实现方式

方法1:Pandas内置映射(推荐,效率高)

用Series.map()做字典映射,不匹配的项会返回NaN,再用fillna()填充原列值:

df1['vk_dom'] = df1['domains'].map(domain_dict).fillna(df1['domains'])

方法2:Lambda表达式+字典get方法

用apply()结合字典的get()方法,直接指定匹配不到时返回原值:

df1['vk_dom'] = df1['domains'].apply(lambda x: domain_dict.get(x, x))

方法3:修复后的循环写法(不推荐,大数据集效率低)

如果一定要用循环,先默认赋值原列值,再遍历匹配替换:

import numpy as np

df1["vk_dom"] = df1['domains']  # 先设为原值
for idx in df1.index:
    current_domain = df1['domains'][idx]
    if current_domain in domain_dict:
        df1["vk_dom"][idx] = domain_dict[current_domain]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:05:21