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

如何使用嵌套字典映射替换Pandas DataFrame指定列的值

实现方法

首先需要预处理嵌套映射字典,把ColA中以元组形式定义的多对一映射展开为单个键值对,再调用pandas的map方法完成列值替换,完整实现代码如下:

import pandas as pd
import numpy as np

# 原有数据定义
dict_map = {
        'ColA' : {('A','Distinct (Highest)','B','C'):'Pass'},
        'ColB' : {'Great': 'A', 'Avg': 'Average', 'F (Absent)': 'Fail'}
    }
cols_to_map = ['ColA','ColB']
new_cols = ['ColA-new','ColB-new']
df = pd.DataFrame(
    {
            'ID': ['AB01', 'AB02', 'AB03', 'AB04', 'AB05','AB06'],
            'ColA': ["A","B","A",np.nan,
                     "C",np.nan],
            'ColB': ['Great', 'Avg', np.nan, np.nan, 'F (Absent)', np.nan]
    })

# 第一步:预处理映射字典,展开元组类型的键
processed_mapping = {}
for col, mapping_rule in dict_map.items():
    expanded_rule = {}
    for key, val in mapping_rule.items():
        # 键为元组时拆分每个元素作为独立键,映射到同一个值
        if isinstance(key, tuple):
            for single_key in key:
                expanded_rule[single_key] = val
        else:
            expanded_rule[key] = val
    processed_mapping[col] = expanded_rule

# 第二步:批量生成映射后的新列
for old_col, new_col in zip(cols_to_map, new_cols):
    df[new_col] = df[old_col].map(processed_mapping[old_col])

# 输出结果查看
print(df)

输出结果示例

IDColAColBColA-newColB-new
0AB01AGreatPassA
1AB02BAvgPassAverage
2AB03ANaNPassNaN
3AB04NaNNaNNaNNaN
4AB05CF (Absent)PassFail
5AB06NaNNaNNaNNaN

所有原有列会完整保留,新增的两个映射列自动追加到DataFrame末尾,未匹配到映射规则的空值(NaN)会保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:54:03