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

求助:基于字典匹配DataFrame指定列并替换对应列值的实现方案

实现方案

这里有几种简洁高效的方法可以实现你的需求:

方法1:map + fillna(推荐)

利用map根据id匹配字典值,再用fillna保留原列中不需要替换的值:

import pandas as pd

df = pd.DataFrame({"id": [1, 2, 3],
                   "result": [100, 200, 300]})

new_values = {1: 1000, 3: 3000}

# 执行替换
df['result'] = df['id'].map(new_values).fillna(df['result'])
# 可选:将结果转回整数类型(map后会默认转为float)
df['result'] = df['result'].astype(int)

print(df)

输出结果:

id  result
0   1    1000
1   2     200
2   3    3000

原理:df['id'].map(new_values)会将匹配字典键的id转换成对应值,不匹配的返回NaN;fillna(df['result'])用原result列的值填充这些NaN,最终得到目标结果。

方法2:loc精准定位替换

通过布尔索引筛选出需要替换的行,直接赋值:

import pandas as pd

df = pd.DataFrame({"id": [1, 2, 3],
                   "result": [100, 200, 300]})

new_values = {1: 1000, 3: 3000}

# 筛选id在字典键中的行,替换result列
df.loc[df['id'].isin(new_values.keys()), 'result'] = df['id'].map(new_values)

print(df)

这个方法更直观,只对符合条件的行进行修改,不会改变其他行的result值。

方法3:replace映射替换

利用replace的字典映射功能,结合id列作为匹配依据:

import pandas as pd

df = pd.DataFrame({"id": [1, 2, 3],
                   "result": [100, 200, 300]})

new_values = {1: 1000, 3: 3000}

# 构建原result值到新值的映射字典
replace_map = df.set_index('id')['result'].replace(new_values)
df['result'] = df['id'].map(replace_map)

print(df)

这个方法先构建了原result和新值的映射关系,再通过id匹配替换,适合更复杂的映射场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:13:23