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

如何将参考DataFrame中标签对应的值高效填充至目标Pandas DataFrame的对应列

最优解法:用Pandas矢量化操作实现标签值映射

嘿,你完全没必要手动遍历处理这种需求,Pandas内置了高效的矢量化方法,比Python循环快得多!这里给你两种常用的最优解决方案:

方法一:使用map()(简洁高效,适合单列匹配)

这种方法是最直接的,先把参考表B转换成字典,然后用map()方法快速将A中data列的动物标签映射到对应的值:

import pandas as pd

# 初始化原始DataFrame
A = pd.DataFrame(index=[0, 1, 2], data=[[1, 2, "goat"], [4, 5, "monkey"], [7,8,"goat"]], columns=["I", "L","data"])
B = pd.DataFrame(index=["goat", "monkey", "sheep"], data=[[10], [40], [70]])

# 将B转换为{动物:值}的字典
value_mapping = B[0].to_dict()
# 为A新增列并填充映射值
A['data value'] = A['data'].map(value_mapping)

print(A)

说明:

  • map()是Pandas的矢量化操作,底层用C实现,比手动循环效率高几个数量级,尤其适合大数据量场景。
  • 如果A的data列出现B中没有的标签(比如sheep),对应位置会自动填充NaN,你可以用fillna()方法设置默认值,比如A['data value'] = A['data'].map(value_mapping).fillna(0)。

方法二:使用merge()(适合复杂匹配场景)

如果你的匹配逻辑更复杂(比如需要多列匹配、保留参考表的更多信息),可以用merge()实现左连接:

import pandas as pd

A = pd.DataFrame(index=[0, 1, 2], data=[[1, 2, "goat"], [4, 5, "monkey"], [7,8,"goat"]], columns=["I", "L","data"])
B = pd.DataFrame(index=["goat", "monkey", "sheep"], data=[[10], [40], [70]])

# 将B的索引转为列并重命名,方便合并
B_formatted = B.reset_index().rename(columns={'index': 'data', 0: 'data value'})
# 左连接合并,保留A的所有行
A = A.merge(B_formatted, on='data', how='left')

print(A)

说明:

  • merge()是Pandas用于数据合并的核心方法,支持多种连接方式(左连接、内连接、外连接等),灵活性更强。
  • 这种方法也会自动处理不匹配的标签,填充NaN。

两种方法都能得到你想要的结果,推荐优先用map(),因为在这个单标签匹配的场景下更简洁高效!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:02:51