如何一次性按索引合并多个含重复列的Pandas DataFrame?
多DataFrame按索引合并解决方案
你可以通过functools.reduce迭代执行你之前的双DataFrame合并逻辑,一次性完成所有DataFrame的合并,完整实现代码如下:
import pandas as pd from functools import reduce # 1. 把所有需要合并的DataFrame放到列表中,按你需要的合并顺序排列 dfs = [df1, df2, df3] # 2. 定义单次合并逻辑,和你之前的双DataFrame合并逻辑完全一致 def merge_step(left_df, right_df): # 取右侧DataFrame和左侧已合并结果的不重复列 diff_cols = right_df.columns.difference(left_df.columns) # 按索引对齐合并 return pd.merge(left_df, right_df[diff_cols], left_index=True, right_index=True) # 3. 迭代合并所有DataFrame df_merged = reduce(merge_step, dfs) # 可选:如果你需要统一将列重命名为col1、col2、col3...的格式 df_merged.columns = [f'col{i+1}' for i in range(df_merged.shape[1])]
注:你之前代码中用到的columns.differences为笔误,pandas 正确的列差方法名为columns.difference,上述代码已做修正。
该方案的逻辑和你之前双DataFrame合并的效果完全一致:每次合并只会把当前右侧DataFrame中没有出现在已合并结果里的列加进去,全程基于索引对齐,后续如果新增待合并的DataFrame,只需要添加到dfs列表中即可,不需要修改其他逻辑。
内容的提问来源于stack exchange,提问作者Maxi Trien
相关产品推荐
相关产品推荐

