如何用一行代码基于另一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
相关产品推荐
相关产品推荐

