Python中如何基于字典通过循环替换Pandas DataFrame的占位符数值
实现步骤
1. 构造总映射字典
把你现有的9套映射统一整理为嵌套字典结构,一级key为(颜色, 区域)的元组,对应每一组Color+Zone的组合;二级key为参数列名(Param_1/Param_2/Param_3),值为「占位符:真实值」的映射字典,示例构造如下:
mapping_dict = { ("Blue", "A"): { "Param_1": {0: 1.2, 1: 3.4, 2: 5.6, 3: 7.8}, # 替换为你实际的真实值 "Param_2": {0: 2.3, 1: 4.5, 2: 6.7, 3: 8.9}, "Param_3": {0: 3.4, 1: 5.6, 2: 7.8, 3: 9.0} }, ("Blue", "B"): { # 填入Blue/B对应的参数映射 }, # 依次补全剩余7组Color+Zone的映射 ("Green", "C"): { "Param_1": {0: 11.2, 1: 13.4, 2: 15.6, 3: 17.8}, "Param_2": {0: 12.3, 1: 14.5, 2: 16.7, 3: 18.9}, "Param_3": {0: 13.4, 1: 15.6, 2: 17.8, 3: 19.0} } }
如果你的映射当前是表格形式的DataFrame(索引为参数名、列名为占位符0/1/2/3),可以直接用df.to_dict("index")一键转为上述格式的字典,无需手动录入。
2. 批量替换参数值
通过groupby按Color和Zone分组,对每组数据应用对应映射替换即可,完整代码如下:
import pandas as pd # 读取原始CSV数据 df = pd.read_csv("你的原始数据文件路径.csv") # 提取所有参数列的列名 param_cols = [col for col in df.columns if col.startswith("Param_")] # 定义分组替换函数 def replace_group_params(group): current_key = (group["Color"].iloc[0], group["Zone"].iloc[0]) current_mapping = mapping_dict[current_key] for col in param_cols: group[col] = group[col].map(current_mapping[col]) return group # 应用替换得到结果 df_replaced = df.groupby(["Color", "Zone"], group_keys=False).apply(replace_group_params)
注意事项
- 确保所有占位符取值都存在于对应映射中,否则替换后对应位置会返回NaN
- 如果存在未定义的占位符需要保留原值,可以把
map方法替换为replace方法,即group[col] = group[col].replace(current_mapping[col])
内容的提问来源于stack exchange,提问作者LostinSpatialAnalysis
相关产品推荐
相关产品推荐

