我有一个张量流多类预测的结果,我已经能够得到每一行的最高值及其'相应的列标题(最可能是预测类)附加到原始数据以进行进一步分析,如下所示:
原始结果df与预测的几率看起来类似于以下但有260列。列标题是第1行的整数..可能性是行0,1,依此类推,数百万..
0 1 2 3 4 5 6 7 8 9 10 11 ....... 259
0 8.840584e-08 0.000115 0.000210 0.001662 0.002789
1 0.000312 0.000549 0.002412 0.000630 0.000077
用于获取最高值(包含在行中)的代码是:
eval_datan['odds']=predsdf.max(axis=1) #gets the largest value in the row
获取相应的列标题并将其附加到原始DF:
eval_datan['pred']=predsdf.idxmax(axis=1) #gets the column header for the largest value
我无法弄清楚如何获得顶级" n"在这种情况下,前5个可能并将它们添加到原始DF
目前的结果如下:
agegrp gender race marital_status region ccs1 ccs2 ccs3 ccs4 ccs5 odds pred
0 272 284 298 288 307 101 164 53 98 200 0.066987 102
1 272 285 300 290 307 204 120 147 258 151 0.196983 47
2 272 284 298 289 307 197 2 39 253 259 0.109894 259
所以我想要的是原始数据末尾的前5个预测和前5个概率。
我看过熊猫中最大的但到目前为止没有运气?
答案 0 :(得分:1)
您可以通过更改下面的变量n
来选择前N个功能。
import pandas as pd
df = pd.read_table('your_sample_data.txt', delimiter='\s+')
n=3 # Top N features
frames = []
df.T.apply(lambda x: frames.append(x.sort_values(ascending=False).head(n).index.tolist()), axis=0)
print(df)
print(df.join(pd.DataFrame(frames, columns=['ccs{}'.format(n+1) for n in range(n)])))
0 1 2 3 4
0 8.840584e-08 0.000115 0.000210 0.001662 0.002789
1 3.120000e-04 0.000549 0.002412 0.000630 0.000077
0 1 2 3 4 ccs1 ccs2 ccs3
0 8.840584e-08 0.000115 0.000210 0.001662 0.002789 4 3 2
1 3.120000e-04 0.000549 0.002412 0.000630 0.000077 2 3 1