如何使用Pandas基于双关联键内连接存在缺失行的DataFrame
Pandas实现双表主键映射内连接方案
核心逻辑
你需要用到3类数据:数据集A、数据集B、Key与ID的一一映射表,通过关联操作即可得到最终结果,以下是可直接运行的示例代码:
完整实现代码
步骤1:导入依赖并准备数据
你可以把示例数据的构造部分替换为你自己的读表代码,比如pd.read_excel("你的文件路径")或者pd.read_csv("你的文件路径")。
import pandas as pd # 示例:构造数据集A df_a = pd.DataFrame({ "Key": ["Key1", "Key2", "Key3", "Key4"], "数值列": ["a", "b", "c", "d"] }) # 示例:构造数据集B(ID4对应行缺失) df_b = pd.DataFrame({ "ID": ["ID1", "ID2", "ID3"], "PO列": ["PO1", "PO2", "PO3"] }) # 示例:构造Key和ID的一一映射表 df_map = pd.DataFrame({ "Key": ["Key1", "Key2", "Key3", "Key4"], "ID": ["ID1", "ID2", "ID3", "ID4"] })
步骤2:执行关联操作
方法1:多步merge(可读性更高,适合小数据量场景)
# 先给数据集A匹配对应的ID df_a_with_id = pd.merge(df_a, df_map, on="Key", how="inner") # 用ID和数据集B做内连接,仅保留两边都匹配的行 df_final = pd.merge(df_a_with_id, df_b, on="ID", how="inner") # 可选:删除重复的ID主键列,只保留Key列 df_final = df_final.drop(columns=["ID"])
方法2:字典映射(运行效率更高,适合十万行以上的大数据量场景)
# 从映射表生成Key到ID的查询字典 key_id_map = df_map.set_index("Key")["ID"].to_dict() # 给数据集A新增匹配后的ID列 df_a["ID"] = df_a["Key"].map(key_id_map) # 内连接后删除多余ID列 df_final = pd.merge(df_a, df_b, on="ID", how="inner").drop(columns=["ID"])
参数说明
how="inner"为内连接规则,仅保留左右表主键完全匹配的行,自动过滤数据集B中缺失的ID4对应的行,完全符合你的需求- 只要你的主键是一一映射无重复值,连接不会产生冗余数据
- 最终输出的
df_final就是合并后的数据集,可通过df_final.to_excel("结果.xlsx", index=False)直接导出到本地。
内容的提问来源于stack exchange,提问作者C Cheng
相关产品推荐
相关产品推荐

