3

各列の確率を持つ Pandas Dataframe があり、10 列あります。行はレコードを表します。上位 3 つの確率を選択し、その列名 (argmax のようなもの) を返したいと思います。

大量の行があるため、できればループを使用したくありません。誰かが私がこれを行うのを手伝ってもらえますか?

データフレームは次のようになります。

    col0    col1    col2    col3    col4    col5    col6    col7    col8    col9    
0   0.089659    0.0 0.0 0.0 0.228481    0.000000    0.0 0.575523    0.0 0.089667    
1   0.000000    0.0 0.0 0.0 0.000000    0.422125    0.0 0.516324    0.0 0.000000    
2   0.000000    0.0 0.0 0.0 0.000000    0.304416    0.0 0.659216    0.0 0.000000    
3   0.598459    0.0 0.0 0.0 0.100792    0.082668    0.0 0.144577    0.0 0.053502    
4   0.100000    0.1 0.1 0.1 0.100000    0.100000    0.1 0.100000    0.1 0.100000    
4

2 に答える 2

2

与えられた df

df
Out[145]: 
       col0  col1  col2  col3      col4      col5  col6      col7  col8  \
0  0.089659   0.0   0.0   0.0  0.228481  0.000000   0.0  0.575523   0.0   
1  0.000000   0.0   0.0   0.0  0.000000  0.422125   0.0  0.516324   0.0   
2  0.000000   0.0   0.0   0.0  0.000000  0.304416   0.0  0.659216   0.0   
3  0.598459   0.0   0.0   0.0  0.100792  0.082668   0.0  0.144577   0.0   
4  0.100000   0.1   0.1   0.1  0.100000  0.100000   0.1  0.100000   0.1   

       col9  
0  0.089667  
1  0.000000  
2  0.000000  
3  0.053502  
4  0.100000

使用できますnlargest

import numpy as np

x=pd.DataFrame(df).T

rslt = pd.DataFrame(np.zeros((0,3)), columns=['top1','top2','top3'])
for i in x.columns:
    df1row = pd.DataFrame(x.nlargest(3, i).index.tolist(), index=['top1','top2','top3']).T
    rslt = pd.concat([rslt, df1row], axis=0)

print rslt

   top1  top2  top3
0  col7  col4  col9
0  col7  col5  col0
0  col7  col5  col0
0  col0  col7  col4
0  col0  col1  col2
于 2016-06-05T03:51:33.353 に答える
0

nlargestを調べる必要があります。これはあなたを動かすのに十分かもしれません:

df.T.nlargest(3, df.T.columns).T
于 2016-06-05T03:45:41.637 に答える