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

如何基于另一列值使用字典替换DataFrame列值

根据ID前缀匹配不同字典替换DataFrame值

问题场景

现有如下DataFrame:

ID    Unique_value    
red_1        0  
red_2        1
blue_1       1                
blue_2       2           
blue_3       2              
blue_4       3         
blue_4       1          

对应ID前缀red和blue,有两个映射字典:

red_dict = {0: "A", 1: "B", 2: "C"}
blue_dict = {0: "D", 1: "B", 2: "E", 3: "F"}

期望输出:

ID    Unique_value    
red_1        A  
red_2        B
blue_1       B                
blue_2       E           
blue_3       E              
blue_4       F         
blue_4       B          

目前已完成字典创建,能循环遍历ID列判断前缀,但不知道怎么根据前缀匹配字典替换对应Unique_value的值。

解决方案

方法1:矢量化操作(推荐,高效)

无需循环,利用numpy.where结合字符串前缀判断实现批量替换:

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    'ID': ['red_1', 'red_2', 'blue_1', 'blue_2', 'blue_3', 'blue_4', 'blue_4'],
    'Unique_value': [0, 1, 1, 2, 2, 3, 1]
})

red_dict = {0: "A", 1: "B", 2: "C"}
blue_dict = {0: "D", 1: "B", 2: "E", 3: "F"}

# 根据ID前缀匹配对应字典完成映射
df['Unique_value'] = np.where(
    df['ID'].str.startswith('red'),
    df['Unique_value'].map(red_dict),
    df['Unique_value'].map(blue_dict)
)

print(df)

方法2:循环实现(适合理解逻辑)

如果需要用循环方式,直接遍历行索引判断前缀后替换:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'ID': ['red_1', 'red_2', 'blue_1', 'blue_2', 'blue_3', 'blue_4', 'blue_4'],
    'Unique_value': [0, 1, 1, 2, 2, 3, 1]
})

red_dict = {0: "A", 1: "B", 2: "C"}
blue_dict = {0: "D", 1: "B", 2: "E", 3: "F"}

for idx in df.index:
    id_val = df.loc[idx, 'ID']
    original_val = df.loc[idx, 'Unique_value']
    if id_val.startswith('red'):
        df.loc[idx, 'Unique_value'] = red_dict[original_val]
    else:
        df.loc[idx, 'Unique_value'] = blue_dict[original_val]

print(df)

两种方法核心逻辑一致:根据ID前缀匹配对应字典,用字典的键值对替换原数值。矢量化方法避免了循环,处理大数据量时性能更优;循环方法逻辑直观,适合新手理解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:53:30