pandas如何排除ENSG列执行列值除以列总和计算,能否使用iloc?
解决方法
完全可以通过iloc实现,也可以按列名筛选要处理的列,两种常用写法如下:
方法1:按列名排除ENSG列(更稳定,不受列顺序变化影响)
直接筛选出除ENSG外的所有列执行计算,再赋值回原表对应位置:
df[df.columns.drop('ENSG')] = df[df.columns.drop('ENSG')].transform(lambda x: x / x.sum())
如果不想修改原DataFrame,可以单独拼接生成新表:
import pandas as pd new_df = pd.concat([ df['ENSG'], df[df.columns.drop('ENSG')].transform(lambda x: x / x.sum()) ], axis=1)
方法2:用iloc实现(适合列顺序固定的场景)
如果你的表结构固定,ENSG是第一列、后面全为需要计算的表达量列,可以直接按索引范围选列:
# iloc[:, 1:] 表示选择所有行,第2列到最后一列(索引从0开始计数,0对应ENSG列) df.iloc[:, 1:] = df.iloc[:, 1:].transform(lambda x: x / x.sum())
补充说明
pandas的transform方法默认会作用于选中的所有列,你只需要提前把不需要计算的ENSG列排除在选择范围外,就不会对它做修改,无需调整transform内部的逻辑。
内容的提问来源于stack exchange,提问作者xonovi4031
相关产品推荐
相关产品推荐

