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

微生物测序分类学数据的DataFrame特定合并方法问询

解决方案:用Pandas实现微生物测序分类学数据合并

针对你需要合并多个样本分类学DataFrame的需求,用Pandas的concat+pivot_table组合就能完美实现,具体步骤如下:

1. 准备样本数据

假设你的每个样本DataFrame结构如下(以df1、df2为例):

import pandas as pd

# 示例df1
df1 = pd.DataFrame({
    'lineage': ['Bacteria;Firmicutes', 'Bacteria;Proteobacteria'],
    'taxonomy': ['phylum;Firmicutes', 'phylum;Proteobacteria'],
    'count': [120, 80]
})

# 示例df2
df2 = pd.DataFrame({
    'lineage': ['Bacteria;Firmicutes', 'Bacteria;Actinobacteria'],
    'taxonomy': ['phylum;Firmicutes', 'phylum;Actinobacteria'],
    'count': [150, 90]
})

2. 给每个样本添加标识列

给每个DataFrame新增sample列,标记所属样本:

df1['sample'] = 'df1'
df2['sample'] = 'df2'

3. 合并所有样本数据

把所有样本DataFrame合并成一个大表:

combined_data = pd.concat([df1, df2], ignore_index=True)

4. 重构表格生成最终格式

用pivot_table将样本名转为列,缺失计数自动补0,同时保留lineage和taxonomy的一一对应关系:

final_df = combined_data.pivot_table(
    index=['lineage', 'taxonomy'],  # 以lineage和taxonomy为索引,确保一一对应
    columns='sample',               # 将样本名转为列
    values='count',                 # 提取count值
    fill_value=0,                   # 缺失值补0
    aggfunc='sum'                   # 同一样本重复lineage时求和(测序数据常用逻辑)
).reset_index()

# 重命名列,统一为count_样本名的格式
final_df.columns = ['lineage', 'taxonomy'] + [f'count_{col}' for col in final_df.columns[2:]]

最终输出结果

运行后得到的final_df格式完全符合你的要求:

lineagetaxonomycount_df1count_df2
Bacteria;Actinobacteriaphylum;Actinobacteria090
Bacteria;Firmicutesphylum;Firmicutes120150
Bacteria;Proteobacteriaphylum;Proteobacteria800

注意事项

  • 如果你的样本DataFrame中存在同一个lineage对应多个taxonomy的情况(违反你说的一一对应规则),需要先清理数据,比如用df.drop_duplicates(subset='lineage', keep='first')保留每个lineage的第一个taxonomy条目
  • 合并6个样本时,只需要把所有样本DataFrame加入concat的列表即可,后续代码无需修改
  • 若确定同一样本内没有重复的lineage,aggfunc可以改用'first',不影响结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:00:58