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

如何使用第二个DataFrame作为值映射替换原DataFrame中的值

问题:基于映射DataFrame实现多列值替换

现有如下原始DataFrame:

import pandas as pd

df = pd.DataFrame({
    'a': [1, 2, 3, 4], 
    'b': [1, 2, 3, 4]
})

输出:

a  b
0  1  1
1  2  2
2  3  3
3  4  4

需要基于以下映射DataFrame,对指定列执行值替换:

replace_value_map = pd.DataFrame({
    'column_to_map': ['a', 'a', 'b', 'b'], 
    'to_replace':    [1,    2,   1,   3 ], 
    'replace_with':  ['x', 'y', 'z', 'x'], 
})

输出:

column_to_map  to_replace replace_with
0             a           1            x
1             a           2            y
2             b           1            z
3             b           3            x

替换规则:

  • 列a:将1替换为'x',2替换为'y'
  • 列b:将1替换为'z',3替换为'x'

期望得到结果:

df_expected = pd.DataFrame({
    'a': ['x','y', 3, 4], 
    'b': ['z', 2,'x',4]
})

输出:

a  b
0  x  z
1  y  2
2  3  x
3  4  4

解决方案

方法1:构造列级替换字典,使用DataFrame.replace()

先将映射DataFrame转换为嵌套字典(键为列名,值为该列的旧值-新值映射),再直接调用replace方法,该方法会自动匹配列和对应的替换规则:

# 构造替换字典结构:{列名: {旧值: 新值}}
replace_dict = replace_value_map.groupby('column_to_map').apply(
    lambda x: dict(zip(x['to_replace'], x['replace_with']))
).to_dict()

# 执行替换
df_result = df.replace(replace_dict)
print(df_result)

方法2:逐列单独处理映射

遍历目标列,针对每列筛选对应规则,使用Series.map()实现替换,同时用fillna保留未匹配的原始值:

df_result = df.copy()
for col in df.columns:
    # 筛选当前列的映射规则
    col_mapping = replace_value_map[replace_value_map['column_to_map'] == col]
    # 生成该列的替换字典
    map_dict = dict(zip(col_mapping['to_replace'], col_mapping['replace_with']))
    # 执行映射,未匹配值保持原样
    df_result[col] = df_result[col].map(map_dict).fillna(df_result[col])

print(df_result)

方法3:使用apply批量处理列

结合apply方法和预先生成的替换字典,一次性完成所有列的替换:

# 生成列级替换字典
replace_dict = replace_value_map.groupby('column_to_map').apply(
    lambda x: dict(zip(x['to_replace'], x['replace_with']))
).to_dict()

# 对每列应用对应替换规则
df_result = df.apply(lambda series: series.map(replace_dict.get(series.name, {})).fillna(series))
print(df_result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:25:21