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

如何在Pandas中按索引合并两个DataFrame并保留唯一列?

按索引合并DataFrame并仅保留唯一列

嘿,针对你遇到的合并后出现重复列带_x/_y后缀的问题,我给你几个实用的解决方案,按需选择就行:

方案1:合并前筛选唯一列(最直接)

如果你的需求是只保留两个DataFrame中各自独有的列(也就是列名在另一个DataFrame里不存在的),可以先筛选出这些列再合并:

import pandas as pd

# 找出仅在X_train中存在的列
only_X_cols = X_train.columns.difference(all_data.columns)
# 找出仅在all_data中存在的列
only_all_cols = all_data.columns.difference(X_train.columns)

# 提取对应列后按索引合并
merged_unique = pd.merge(
    X_train[only_X_cols],
    all_data[only_all_cols],
    left_index=True,
    right_index=True
)

这样得到的merged_unique里就完全没有重复列,都是两个表各自独有的内容。

方案2:保留其中一个表的全部列 + 另一个表的新列

如果你想保留其中一个表的所有列,再加上另一个表中没有的新列(比如保留X_train的所有列,只加all_data里X_train没有的列),可以这么做:

# 获取all_data中X_train没有的列
all_new_cols = all_data.columns.difference(X_train.columns)

# 合并X_train全量列 + all_data的新列
merged_with_X = pd.merge(
    X_train,
    all_data[all_new_cols],
    left_index=True,
    right_index=True
)

反过来,要是想保留all_data的全部列,加X_train的新列,把代码里的X_train和all_data调换位置就行。

方案3:合并后清理重复列

如果你已经执行了原始的merge操作,想快速清理掉重复的后缀列,可以用这种方法(比如保留带_x的列,删除_y的,再恢复原列名):

# 先执行你原来的合并
merged_df = pd.merge(X_train, all_data, left_index=True, right_index=True)

# 过滤掉带_y后缀的列
cleaned_df = merged_df.loc[:, ~merged_df.columns.str.endswith('_y')]
# 把_x后缀去掉,恢复原列名
cleaned_df.columns = cleaned_df.columns.str.replace('_x$', '', regex=True)

这三种方法覆盖了不同的需求场景,你可以根据自己的实际情况选~

内容的提问来源于stack exchange,提问作者Har

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:11:31