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

合并索引匹配的DataFrame遇DataError,求正确生成meth_sub的方法

问题:合并DataFrame并匹配索引提取指定列

需要找到DataFrame meth450_clin_kipan 和 meth_450_10k_kipan 中索引值相同的行,当索引匹配时,提取meth450_clin_kipan中的admin.disease_code列,与meth_450_10k_kipan合并生成新DataFrame meth_sub。

原错误代码

# Add tumor subtype info to methylation df
# If TCGA ID in clinical df matches the TCGA ID in methylation df, retrieve the "admin.disease_code" column value from the clinical df
meth_sub = pd.concat([meth450_clin_kipan, meth_450_10k_kipan], 1).dropna().mean(axis=1, level=0)
meth_sub

报错信息

DataError: No numeric types to aggregate

样例数据

meth450_clin_kipan 样例

meth450_clin_kipan.iloc[0:3,0:3].to_dict()

{'admin.disease_code': {'TCGA-2K-A9WE-01A': 'kirp',
  'TCGA-2Z-A9J1-01A': 'kirp',
  'TCGA-2Z-A9J2-01A': 'kirp'},
 'days_to_death': {'TCGA-2K-A9WE-01A': nan,
  'TCGA-2Z-A9J1-01A': nan,
  'TCGA-2Z-A9J2-01A': nan},
 'vital_status': {'TCGA-2K-A9WE-01A': 'alive',
  'TCGA-2Z-A9J1-01A': 'alive',
  'TCGA-2Z-A9J2-01A': 'alive'}}

meth_450_10k_kipan 样例

meth_450_10k_kipan.iloc[0:3,0:3].to_dict()

{'cg00000029': {'TCGA-2K-A9WE-01A': 0.461440642939772,
  'TCGA-2Z-A9J1-01A': 0.595894468074615,
  'TCGA-2Z-A9J2-01A': 0.481304782143526},
 'cg00000165': {'TCGA-2K-A9WE-01A': 0.143910373119058,
  'TCGA-2Z-A9J1-01A': 0.0807243779293262,
  'TCGA-2Z-A9J2-01A': 0.437447195378987},
 'cg00000236': {'TCGA-2K-A9WE-01A': 0.847164847154162,
  'TCGA-2Z-A9J1-01A': 0.867305510246114,
  'TCGA-2Z-A9J2-01A': 0.898927359292032}}

期望输出格式

cg00000029cg00000165cg00000236admin.disease_code
TCGA-2K-A9WE-01A0.4614406429397720.1439103731190580.847164847154162kirp
TCGA-2Z-A9J1-01A0.5958944680746150.08072437792932620.867305510246114kirp
TCGA-2Z-A9J2-01A0.4813047821435260.4374471953789870.898927359292032kirp

错误原因

原代码逻辑完全偏离需求:

  1. 使用pd.concat合并后调用mean(axis=1, level=0),但meth450_clin_kipan包含字符串类型列(如admin.disease_code),mean仅支持数值类型计算,因此触发DataError。
  2. 需求是合并匹配索引的指定列,无需计算均值。

正确实现代码

方法1:用join合并(推荐)

利用DataFrame的join方法,默认按索引匹配,仅提取目标列合并:

# 提取临床数据中需要的列,按索引与甲基化数据合并(只保留共同索引行)
meth_sub = meth_450_10k_kipan.join(meth450_clin_kipan['admin.disease_code'], how='inner')

方法2:用merge合并

指定按索引匹配,同样只提取目标列:

meth_sub = pd.merge(
    meth_450_10k_kipan,
    meth450_clin_kipan[['admin.disease_code']],
    left_index=True,
    right_index=True,
    how='inner'
)

两种方法均可生成符合期望的meth_sub,包含甲基化数据的所有列及匹配的admin.disease_code列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:06:31