标签:argmax python performance pandas
我正在处理一个数据帧,其中每行按其概率加权.现在,我想选择具有最高概率的行,并且我使用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
标签:argmax,python,performance,pandas 来源: https://codeday.me/bug/20190827/1746154.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。