Python Pandas中如何基于关联字段跨表取值实现表连接
Pandas 按关联键合并两表的简洁规范写法
你的现有写法逻辑正确,但可以通过优化操作顺序、采用链式写法让代码更简洁、性能更好,同时规避容易出错的细节问题。
优化思路
- 不需要等合并完成后再筛选列,提前把主表中用不到的
Supplier、Ship_From字段过滤掉,减少合并过程处理的数据量,数据量级大时性能提升明显 - 用链式写法整合多步操作,避免多次赋值中间变量,同时不推荐使用
inplace=True参数(Pandas官方已不推荐该写法,后续版本存在兼容性风险) - 注意字段名大小写匹配:你的示例中主表字段是大写开头的
Description,原代码里写的小写description会触发字段不存在的报错
推荐代码实现
# 链式写法完成合并、去重,逻辑清晰性能更好 result = ( orders .merge( # 提前只取主表需要的关联键和结果字段,过滤冗余列 master[['item_id', 'Description']], on="item_id", how="left" ) .drop_duplicates(keep="first") )
额外说明
drop_duplicates里参数subset=None、keep='first'都是默认值,不需要额外声明,写出来仅作语义明确用- 如果你的数据符合业务常规约束:
Orders表的(Date, item_id)组合无重复、Master主表的item_id是唯一主键,那左连不会产生额外重复行,可以直接省略去重步骤,代码可以进一步简化:
# 关联键均唯一时可省略去重 result = orders.merge(master[['item_id', 'Description']], on="item_id", how="left")
运行上述代码得到的结果完全匹配你给出的预期输出,仅包含Date、item_id、Description三个字段,关联值一一对应。
内容的提问来源于stack exchange,提问作者Sriya TR
相关产品推荐
相关产品推荐

