我有一个Pandas数据框,每列有一个概率,我有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

最佳答案

给定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

10-07 14:19