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

如何基于低层列合并多级列结构的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:57:01