python – pandas idxmax:在绑定的情况下返回所有行

我正在处理一个数据帧,其中每行按其概率加权.现在,我想选择具有最高概率的行,并且我使用pandas idxmax()来执行此操作,但是当存在tie时,它只返回绑定的第一行.就我而言,我希望得到所有相关的行.

此外,我这样做是作为一个研究项目的一部分,我正在处理数百万个数据帧,如下所示,所以保持快速是一个问题.

例:

我的数据如下:

data = [['chr1',100,200,0.2],
    ['ch1',300,500,0.3],
    ['chr1', 300, 500, 0.3],
    ['chr1', 600, 800, 0.3]]

从这个列表中,我创建了一个pandas数据帧,如下所示:

weighted = pd.DataFrame.from_records(data,columns=['chrom','start','end','probability'])

看起来像这样:

  chrom  start  end  probability
0  chr1    100  200          0.2
1   ch1    300  500          0.3
2  chr1    300  500          0.3
3  chr1    600  800          0.3

然后使用以下方法选择适合argmax(概率)的行:

selected =  weighted.ix[weighted['probability'].idxmax()]

当然会返回:

chrom          ch1
start          300
end            500
probability    0.3
Name: 1, dtype: object

当有联系时,是否有(快速)方法获得所有值?

谢谢!

解决方法:

那么,这可能是您正在寻找的解决方案:

weighted.loc[weighted['probability']==weighted['probability'].max()].T
#               1     2     3
#chrom        ch1  chr1  chr1
#start        300   300   600
#end          500   500   800
#probability  0.3   0.3   0.3
上一篇:DMA


下一篇:如何继续执行之前失败的maven build