如何基于低层列合并多级列结构的Pandas DataFrame
报错原因
你使用pd.concat为每个DataFrame添加顶层通路列名后,所有列的列名会变为二元元组格式(顶层通路名, 原列名),直接指定on="User ID"会因无法匹配到对应列报错。
可行解决方案
方案1:指定完整多级列名作为合并键,适配两两合并场景
合并时通过left_on和right_on分别传入左右两个DataFrame中User ID列的完整多级列名:
# 两两合并final1和final2 merged_df = pd.merge( final1, final2, left_on=(title1, "User ID"), right_on=(title2, "User ID"), how="outer" ) # 继续合并final3 merged_df = pd.merge( merged_df, final3, left_on=(title1, "User ID"), right_on=(title3, "User ID"), how="outer" )
方案2:索引对齐合并,适配多数据集批量操作
该方法更简洁,合并后索引即为User ID,后续筛选共有基因更方便:
# 为每个多级列DataFrame设置User ID为索引 final1_idx = final1.set_index((title1, "User ID")) final2_idx = final2.set_index((title2, "User ID")) final3_idx = final3.set_index((title3, "User ID")) # 按索引对齐合并,完整保留所有列层级 final_merged = final1_idx.join([final2_idx, final3_idx], how="outer") # 筛选所有通路中共同出现的基因,直接删除存在空值的行即可 common_genes = final_merged.dropna() # 提取共有基因的User ID列表 common_gene_ids = common_genes.index.tolist()
两种方案均不会删除列的顶层层级,可完整区分不同数据集的所属列。
内容的提问来源于stack exchange,提问作者eh329
相关产品推荐
相关产品推荐

