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

R语言按列名归属合并列:基于物种-科属关系汇总丰度

按物种科属合并丰度列的Pandas解决方案

嗨,这个需求我之前做微生物组数据分析时经常碰到,用Pandas几行代码就能完美解决!下面一步步给你讲清楚怎么实现:

先明确数据结构(附示例)

假设你的df1是样本×物种的丰度表,df2是物种到科属的映射表,先模拟一组数据方便理解:

import pandas as pd

# 示例:样本-物种丰度表
df1 = pd.DataFrame({
    'Sp1': [0.1, 0.2, 0.3],
    'Sp3': [0.05, 0.15, 0.25],
    'Sp6': [0.2, 0.1, 0.05],
    'Sp2': [0.3, 0.2, 0.1],
    'Sp4': [0.15, 0.25, 0.35]
}, index=['Sample1', 'Sample2', 'Sample3'])

# 示例:物种-科属映射表(把物种设为索引,方便后续匹配)
df2 = pd.DataFrame({
    'Species': ['Sp1', 'Sp3', 'Sp6', 'Sp2', 'Sp4'],
    'Family': ['Fam1', 'Fam1', 'Fam1', 'Fam2', 'Fam2']
}).set_index('Species')

核心实现代码

只需要一行关键代码,就能完成按科属分组求和,自动丢弃原物种列:

# 按科属对df1的列分组求和,axis=1表示操作列维度
df3 = df1.groupby(df2['Family'], axis=1).sum()

运行后df3就是你要的样本×科属总丰度表,示例输出如下:

Fam1Fam2
Sample10.350.45
Sample20.450.45
Sample30.60.45

关键注意事项

  • 物种名必须完全匹配:df2里的物种名称要和df1的列名完全一致(包括大小写、空格、特殊字符),不然会导致部分物种无法匹配被忽略。如果有不匹配的情况,可以先做数据清洗,比如用str.strip()去除空格、统一大小写。
  • 处理不匹配的物种:如果df1有df2没收录的物种,或者反过来,分组时会自动跳过不匹配的部分。如果需要保留这些物种(比如归为“未知科属”),可以先给df2补全映射,或者用fillna设置默认分组。
  • 扩展到多级分类:如果你的分类层级更多(比如门、纲、目),只需要把groupby的依据换成对应的列就行,比如df1.groupby(df2['Order'], axis=1).sum()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:49:12