我有一个张量流多类预测的结果,并且我已经能够获取每一行的最高值及其对应的列标题(这是最有可能的预测类)以附加到原始数据中以便进一步分析,例如:
具有预测几率的原始结果df看起来类似于以下内容,但具有260列。列标题是整数的第一行。似然是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”,并将其添加到原始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个赔率。
我看过最大的熊猫,但到目前为止没有运气吗?
最佳答案
您可以通过更改下面的变量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
关于python - 如何获取前n个值和对应的列标题以追加到Pandas数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44510068/