我正在处理一个数据帧,其中每行按其概率加权.现在,我想选择具有最高概率的行,并且我使用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