私は、確率によって各行に重みを付けるデータフレームを使用しています。ここで、確率が最も高い行を選択したいので、pandas idxmax() を使用していますが、同点の場合は、同点の最初の行を返すだけです。私の場合、結ぶすべての行を取得したいと思います。
さらに、以下のような数百万のデータフレームを処理する研究プロジェクトの一環としてこれを行っているため、高速に保つことが問題です。
例:
私のデータは次のようになります。
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(probability) に適合する行を選択します。
selected = weighted.ix[weighted['probability'].idxmax()]
もちろん、どちらが返されますか:
chrom ch1
start 300
end 500
probability 0.3
Name: 1, dtype: object
同点の場合にすべての値を取得する (高速) 方法はありますか?
ありがとう!