如何将参考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
相关产品推荐
相关产品推荐

