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

如何基于已有DataFrame生成按组计算均值的新DataFrame?

按Group分组计算基因列均值的实现方案

刚好我经常处理这类生物信息学的DataFrame数据,用pandas就能完美解决你的需求,步骤超简单:

首先,先把你的示例数据转换成pandas能处理的DataFrame:

import pandas as pd

# 构建原始数据
raw_data = {
    'gene1': [1, 2, 3, 4, 5],
    'gene2': [2, 3, 4, 5, 6],
    'gene3': [4, 4, 4, 4, 4],
    'group': [1, 1, 1, 2, 2]
}
df = pd.DataFrame(raw_data, index=['sample1', 'sample2', 'sample3', 'sample4', 'sample5'])

接下来就是核心的分组求均值操作,一行代码就能搞定:

# 按group分组计算各基因列的均值,并将group从索引转为普通列
result_df = df.groupby('group').mean().reset_index()

代码解释:

  • df.groupby('group'):把原始DataFrame按照group列的取值(1和2)分成两个子数据集
  • .mean():自动对每个子数据集中的数值型列(也就是gene1、gene2、gene3)计算平均值,会自动跳过非数值列
  • .reset_index():默认情况下groupby的结果会把分组列(group)作为索引,用这个方法可以把它转成普通列,刚好匹配你想要的输出格式

运行后打印result_df,输出就是你要的结果:

group  gene1  gene2  gene3
0      1    2.0    3.0      4
1      2    4.5    5.5      4

如果想让gene1的2.0显示成2(不影响数值精度的话),可以加个小调整:

# 把整数类型的均值转成int,保留小数的保持float
result_df['gene1'] = result_df['gene1'].apply(lambda x: int(x) if x.is_integer() else x)
result_df['gene2'] = result_df['gene2'].apply(lambda x: int(x) if x.is_integer() else x)

调整后输出就完全和你给出的目标格式一致啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:17:43