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

通过键将数据框某列值替换为另一数据框中的对应值

解决方案

方法1:分步映射(先转数字,再转v2s)

假设你已经定义好两个字典:

  • v1_to_num:键为v1s的取值,值为对应的转换数字
  • num_to_v2:键为数字,值为对应的v2s

直接用pandas的map()方法对目标列做两次映射即可,无需用merge或join:

import pandas as pd

# 示例数据(可替换为你的实际数据)
df = pd.DataFrame({'col1': ['a', 'b', 'c', 'a'], 'col2': [1, 2, 3, 4]})
v1_to_num = {'a': 10, 'b': 20, 'c': 30}
num_to_v2 = {10: 'x', 20: 'y', 30: 'z'}

# 定位目标列:如果N是从1开始的列序号,转成pandas的列名/索引
target_col = df.columns[N-1]

# 第一步:将v1s转换为数字
df[target_col] = df[target_col].map(v1_to_num)
# 第二步:将数字转换为v2s
df[target_col] = df[target_col].map(num_to_v2)

方法2:合并字典直接映射(更高效)

把两个字典合并成一个v1_to_v2字典,一步完成替换,减少中间步骤:

# 合并字典:直接建立v1到v2的映射关系
v1_to_v2 = {v1_val: num_to_v2[num_val] for v1_val, num_val in v1_to_num.items()}

# 直接替换目标列
df[target_col] = df[target_col].map(v1_to_v2)

注意事项

  • 如果v1s中存在不在v1_to_num里的取值,map()会返回NaN,可以用fillna()保留原数值:
    df[target_col] = df[target_col].map(v1_to_v2).fillna(df[target_col])
    
  • 确保目标列的取值类型和字典的键类型完全一致(比如都是字符串或都是整数),否则会出现映射失败的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:36:24