如何基于另一列值使用字典替换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
相关产品推荐
相关产品推荐

