12

私は、確率によって各行に重みを付けるデータフレームを使用しています。ここで、確率が最も高い行を選択したいので、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

同点の場合にすべての値を取得する (高速) 方法はありますか?

ありがとう!

4

2 に答える 2