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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:54:03