gpt4 book ai didi

python - 获取组内的最大值,但不仅仅是第一个(ex æquo 也是如此)

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:42 26 4
gpt4 key购买 nike

我解释一下上下文:我有一个来自 Augustus 的输出(针对 2 个物种)有很多序列,我做了一个爆炸并得到了一组同源配对序列,我现在需要做的是只保留这些序列每个集群中的最高身份,甚至是以前的身份。 例如:

我实际上有一个数据框:

custer     seq 1       seq2        pident    whatever
1 A B 89 47
1 A B 89 68
1 C D 45 90
2 E F 79 25
2 G H 89 45

……我想要得到的是:

custer     seq 1       seq2        pident    whatever
1 A B 89 47
1 A B 89 68
2 G H 89 45

事实上,我想在每个集群中的 pident 列中保留最大值的行,但不仅仅是第一个,因为以下脚本会这样做:

data_grpd = data.groupby(['cluster'])
result=data.loc[data_grpd['pident'].idxmax()]

我得到:

custer     seq 1       seq2        pident    whatever
1 A B 89 47
2 G H 89 45

换句话说,如果存在 ex æquo,我想将它们全部保留在每个集群中。

有人可以帮助我吗?

谢谢。

最佳答案

使用transform每组的 max 值与原始 DataFrame 大小相同,按 pident 列比较,最后按 boolean indexing 过滤:

data_grpd = data.groupby(['cluster'])
result = data.loc[data_grpd['pident'].transform('max') == data['pident']]
print (result)
cluster seq 1 seq2 pident whatever
0 1 A B 89 47
1 1 A B 89 68
4 2 G H 89 45

详细信息:

print (data_grpd['pident'].transform('max'))
0 89
1 89
2 89
3 89
4 89
Name: pident, dtype: int64

编辑:一种可能的解决方案是先排序:

data_wo_eqSpec[['seq1','seq2']] = np.sort(data_wo_eqSpec[['seq1','seq2']], axis=1)

data_grpd = data_wo_eqSpec.groupby(['cluster_name'])
result = data_wo_eqSpec.loc[data_grpd['pident'].transform('max') == data_wo_eqSpec['pident']]
print(result)

关于python - 获取组内的最大值,但不仅仅是第一个(ex æquo 也是如此),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50157251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com