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

pandas中内连接两个dataframe时如何保留全部连接键列?

实现内连接同时保留双侧连接键列的方法

使用pd.merge()时,若要保留左右表各自的连接键列,不要直接使用on参数指定公共连接列,改用left_on、right_on分别指定两侧的连接列即可。

实现逻辑

  • 直接传on='xxx'时,pandas会将该列识别为“两侧共享的匹配依据”,自动去重为单列输出,不会保留两份。
  • 分别传left_on、right_on指定两侧的匹配列时,pandas会把这两列识别为需要正常保留的普通列,按照默认规则为同名列追加_x(来源左表)、_y(来源右表)后缀,和你期望的输出结构完全匹配。
  • 该写法的内连接匹配逻辑、结果集范围和使用on参数的版本完全一致,不会改变原有连接效果。

修正后可运行代码

import pandas as pd

head = [['nationality', 'BART', 'USA']]
body = [['placeOfBirth', 'BART', 'NEWYORK'], ['hasFather', 'BART', 'HOMMER']]
head_df = pd.DataFrame(head, columns=['pred', 'subj', 'obj'])
body_df = pd.DataFrame(body, columns=['pred', 'subj', 'obj'])

# 核心修改:替换原on='subj'的写法,分别指定两侧连接列
joined_df = pd.merge(
    head_df,
    body_df,
    how='inner',
    left_on='subj',
    right_on='subj'
)

运行输出结果

pred_x subj_x obj_x        pred_y subj_y    obj_y
0  nationality   BART   USA  placeOfBirth   BART  NEWYORK
1  nationality   BART   USA     hasFather   BART   HOMMER

补充说明

  • 你原有代码中存在变量笔误:引用的body1_df未定义,替换为已创建的body_df即可正常运行。
  • 如果需要自定义同名列的后缀,可在merge时传入suffixes=('_left', '_right')参数,替换默认的_x/_y后缀。

内容的提问来源于stack exchange,提问作者Won chul Shin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 09:24:03