我有一个张量流多类预测的结果,并且我已经能够获取每一行的最高值及其对应的列标题(这是最有可能的预测类)以附加到原始数据中以便进一步分析,例如:

具有预测几率的原始结果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/

10-12 21:52