如何在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
相关产品推荐
相关产品推荐

