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

Python分析制表符分隔CSV:保留同序列最低TPM值的基因

解决方法:用Pandas筛选每个序列的最低TPM基因

嘿,这个需求用Pandas处理起来超顺手,我帮你捋清楚具体步骤:

首先咱们明确核心逻辑:根据chr、start、end这三个字段确定同一个序列(看你的示例数据,这三个值完全相同的就是同一序列),然后在每个序列组里保留Log2_TPM_DM_Moyenne值最小的那一行。

步骤1:导入并读取数据

先通过Pandas读取你的制表符分隔CSV文件,记得指定分隔符为\t:

import pandas as pd

# 替换成你的实际文件路径
df = pd.read_csv('your_data.csv', sep='\t')

步骤2:分组筛选最低TPM行

用groupby按序列标识字段分组,再通过idxmin()找到每个组中TPM值最小的行的索引,最后用loc提取这些目标行:

# 按chr、start、end分组,获取每个组中TPM最小的行的索引
min_tpm_rows_idx = df.groupby(['chr', 'start', 'end'])['Log2_TPM_DM_Moyenne'].idxmin()

# 筛选出最终需要的行
result_df = df.loc[min_tpm_rows_idx]

步骤3:保存处理结果

把整理好的数据导出成新的制表符分隔文件:

result_df.to_csv('min_tpm_per_sequence.csv', sep='\t', index=False)

补充:处理多行TPM值同为最小的情况

如果某个序列里有多个基因的TPM值都是组内最小值,上面的方法只会保留第一个匹配行。要是你想保留所有这类行,可以用transform做标记筛选:

# 给每行标记是否为所在组的TPM最小值
df['is_min_tpm'] = df.groupby(['chr', 'start', 'end'])['Log2_TPM_DM_Moyenne'].transform(lambda x: x == x.min())

# 筛选出所有标记为True的行
result_df = df[df['is_min_tpm']]

注意:如果你的“序列”是由其他字段(比如单独的sequence列)标识的,只需要把groupby里的字段换成对应的列名就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:35:58