我有一个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