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

分组内保留最高同源性序列(含并列结果)的技术需求

嘿,这个需求在序列分析工作里太常见了!我给你准备了两种实用的实现方法,不管你习惯用Python还是R都能轻松搞定👇

方法一:用Python Pandas处理

假设你的BLAST结果已经读入成了Pandas DataFrame(如果是csv/tsv文件直接用pd.read_csv读取就行),核心思路是按簇分组找到最高相似度,再筛选出对应条目:

简洁版代码

import pandas as pd

# 读取你的BLAST结果文件(替换成你的文件路径)
blast_df = pd.read_csv("your_blast_clusters.csv")

# 给每行标记所属簇的最高相似度,然后筛选匹配的行
blast_df['cluster_max_pident'] = blast_df.groupby('cluster')['pident'].transform('max')
filtered_df = blast_df[blast_df['pident'] == blast_df['cluster_max_pident']].drop('cluster_max_pident', axis=1)

# 保存筛选后的结果
filtered_df.to_csv("top_pident_clusters.csv", index=False)

分步解释

  • groupby('cluster')['pident'].transform('max'):给每个簇的所有行都添加上该簇的最高pident值
  • 筛选出pident等于对应簇最高值的行,自动保留所有并列的最高相似度条目
  • 最后删掉临时添加的标记列,输出干净的结果
方法二:用R + dplyr处理

如果你更习惯用R,用dplyr包的链式操作可以一步到位,代码可读性拉满:

library(dplyr)

# 读取你的BLAST结果文件
blast_df <- read.csv("your_blast_clusters.csv")

# 按簇分组,筛选出每个簇中pident等于最大值的所有行
filtered_df <- blast_df %>%
  group_by(cluster) %>%
  filter(pident == max(pident)) %>%
  ungroup()

# 保存结果
write.csv(filtered_df, "top_pident_clusters.csv", row.names = FALSE)

效果说明

不管用哪种方法,都会完美保留每个簇里相似度最高的所有条目——比如你示例里cluster1的两条pident=89的行都会被留下,而pident=45的行被剔除;cluster2里只有pident=89的行会被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:45:21