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

如何用一行代码基于另一DataFrame列名替换目标DataFrame的值?

问题

我有两个DataFrame:

import pandas as pd

data1 = {'id': [1,2,3],
        'ref_1': ['A', 'C', 'B'],
        'ref_2': ['B', 'B', 'A'],
        'ref_3': ['C', 'A', 'C']}
df1 = pd.DataFrame(data1)

# df1输出
# id  ref_1   ref_2   ref_3
# 1   A       B       C
# 2   C       B       A
# 3   B       A       C

data2 = {'id': [1,2,3],
        'A': [650, 120, 301],
        'B': [120, 134, 133],
        'C': [972, 319, 130]}
df2 = pd.DataFrame(data2)
# df2输出
# id  A   B   C
# 1   650 120 972
# 2   120 134 319
# 3   301 133 130

我希望将ref_1、ref_2和ref_3中的值替换为对应单元格列名在df2中的值,最终结果如下:

id  ref_1   ref_2   ref_3
1   650     120     972
2   319     134     120
3   133     301     130

我知道可以用循环实现,但有没有一行代码的实现方式?

一行代码解决方案

这里提供两种简洁的实现方式:

方法1:使用lookup匹配取值

df1[['ref_1', 'ref_2', 'ref_3']] = df1[['ref_1', 'ref_2', 'ref_3']].apply(lambda col: df2.lookup(df2.index, col))

方法2:转字典批量替换(更高效)

df1 = df1.set_index('id').replace(df2.set_index('id').to_dict('series')).reset_index()

说明

  • 方法1:针对ref_*列逐列调用df2.lookup,通过行索引和列名的匹配直接取出对应数值,替换原列内容。
  • 方法2:先将df2转为以id为索引的结构,再转成字典(每个字母对应不同id下的数值序列),然后用replace批量替换df1中的字母,最后恢复id为普通列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:27:37