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

如何在Pandas中用另一DataFrame的值替换指定列内容?

解决DataFrame列值匹配替换问题

核心思路

利用pandas的字典映射实现高效匹配替换:先将映射表(df2)转换为原始编码:新编码的字典,再用Series.map()方法快速替换目标DataFrame(df1)指定列的数值。这种方法比合并(merge)更高效,尤其适合df1行数远大于df2的场景。

基础实现代码

import pandas as pd

# 构建示例数据
df1 = pd.DataFrame({
    'Postcode': ['BS105JJ', 'BS105JL', 'BS105JN', 'BS105JP', 'BS105JR', 'BS105JS', 'BS105JT'],
    'Column 2': [1, 0, 1, 0, 1, 0, 1],
    'Column 3': [3, 0, 2, 0, 1, 0, 5],
    'Column 4': [0, 0, 0, 0, 0, 0, 0],
    'Column 5': [1, 1, 1, 1, 1, 1, 1]
})

df2 = pd.DataFrame({
    'Code': [0, 1, 2, 3, 4, 5],
    'Code New': [1, 3, 5, 7, 9, 3]
})

# 生成编码映射字典
code_mapping = df2.set_index('Code')['Code New'].to_dict()

# 替换df1的Column 2列
df1['Column 2'] = df1['Column 2'].map(code_mapping)

# 输出结果
print(df1)

执行后输出与预期结果完全一致:

Postcode  Column 2  Column 3  Column 4  Column 5
0  BS105JJ         3         3         0         1
1  BS105JL         1         0         0         1
2  BS105JN         3         2         0         1
3  BS105JP         1         0         0         1
4  BS105JR         3         1         0         1
5  BS105JS         1         0         0         1
6  BS105JT         3         5         0         1

可复用函数封装

如果需要对不同列、不同映射表重复执行替换,可封装成通用函数:

def replace_column_values(df_target, target_col, df_mapping, mapping_old_col, mapping_new_col):
    """
    替换DataFrame指定列的数值
    :param df_target: 需要修改的目标DataFrame
    :param target_col: 目标列名
    :param df_mapping: 映射关系DataFrame
    :param mapping_old_col: 映射表中原始编码的列名
    :param mapping_new_col: 映射表中新编码的列名
    :return: 修改后的DataFrame
    """
    # 构建映射字典
    mapping_dict = df_mapping.set_index(mapping_old_col)[mapping_new_col].to_dict()
    # 替换目标列,若原始值不在映射中则保留原数值
    df_target[target_col] = df_target[target_col].map(lambda x: mapping_dict.get(x, x))
    return df_target

# 使用示例:替换df1的Column 3列(假设用同一映射表)
df1_updated = replace_column_values(df1, 'Column 3', df2, 'Code', 'Code New')

注意事项

  • 若目标列存在映射表中没有的编码,map()默认返回NaN;函数中用mapping_dict.get(x, x)可保留原数值,避免缺失值。
  • 字典映射的时间复杂度为O(n),处理百万级行数的df1也能保持高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:11:21