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

标签 python pandas dataframe

我解释一下上下文:我有一个来自 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/

相关文章:

python - 具有 postgres 引用约束的 Django Arrayfield

python - 根据值合并行( Pandas 到 excel - xlsxwriter)

python - key 错误 : 'type' while drawing a scatter plot with grouped x axis in Python

r - 从具有不同元素数量的 xml 创建数据框

javascript - 是否有 Python 2 等效于 Javascripts confirm() 命令?

python - 将 2 列类似计数器的 csv 文件转换为 Python collections.Counter?

python - Pandas:找到最大值的列名,我需要过滤带有星号文本的列?

python 在统一的半年期间重新采样(相当于 pandas resample 中的 'BQ')

python - Pandas:将 IP 解析为国家/地区的最快方法

python - 如何过滤包含 NaN 的 bool 掩码