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

Python如何基于另一个DataFrame的匹配规则替换当前DataFrame的指定值

解决方案

核心思路是将宽格式的查找表转为长格式,通过多字段匹配完成替换,再恢复为原表结构,两种实现方式如下:

方式1:直观转换法(易调试,适合中小数据量)

import pandas as pd

# 若查找表参数名和原表不一致,先统一命名
lookup_df['Parameter'] = lookup_df['Parameter'].str.replace('Parameter_', 'Param_')

# 1. 处理查找表,转为长格式方便匹配
lookup_long = lookup_df.melt(
    id_vars=['Parameter', 'Color', 'Zone'],
    value_vars=['0', '1', '2', '3'],
    var_name='original_val',
    value_name='new_val'
)
# 数值类型对齐,避免匹配失败
lookup_long['original_val'] = lookup_long['original_val'].astype(int)

# 2. 把原参数表转为长格式,保留无需修改的Dependent.var列
param_long = Param.melt(
    id_vars=['Color', 'Zone', 'Dependent.var'],
    value_vars=['Param_1', 'Param_2', 'Param_3'],
    var_name='Parameter',
    value_name='original_val'
)

# 3. 多字段匹配获取替换值
merged = param_long.merge(
    lookup_long,
    on=['Parameter', 'Color', 'Zone', 'original_val'],
    how='left'
)

# 4. 转回宽格式恢复原表结构
result = merged.pivot(
    index=['Color', 'Zone', 'Dependent.var'],
    columns='Parameter',
    values='new_val'
).reset_index().rename_axis(columns=None)

# 调整列顺序和原Param表完全一致
result = result[['Color', 'Zone', 'Dependent.var', 'Param_1', 'Param_2', 'Param_3']]

方式2:高性能映射法(适合百万级以上大数据量)

import pandas as pd

# 统一参数命名
lookup_df['Parameter'] = lookup_df['Parameter'].str.replace('Parameter_', 'Param_')

# 处理查找表为多级索引映射
lookup_long = lookup_df.melt(
    id_vars=['Parameter', 'Color', 'Zone'],
    value_vars=['0', '1', '2', '3'],
    var_name='original_val',
    value_name='new_val'
)
lookup_long['original_val'] = lookup_long['original_val'].astype(int)
lookup_map = lookup_long.set_index(['Parameter', 'Color', 'Zone', 'original_val'])['new_val']

# 逐列映射替换,无需转换整张表的结构
param_cols = ['Param_1', 'Param_2', 'Param_3']
for col in param_cols:
    Param[col] = Param.apply(
        lambda row: lookup_map.get((col, row['Color'], row['Zone'], row[col])),
        axis=1
    )

注意事项

  • 需保证查找表中(Parameter, Color, Zone, original_val)的组合唯一,避免匹配时出现重复值
  • 若存在匹配不到的组合,结果会返回NaN,可根据需求添加fillna()处理缺失值
  • 可根据实际参数列数量调整param_cols的取值范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:09:01