1
我擁有張量流多類預測的結果,並且我已經能夠獲得每行和其相應列標題的最高值(這是最有可能預測的類別)追加到原始數據進行進一步分析,如下所示:如何獲得前n個值和相應的列標題以追加到熊貓數據框中
與預測賠率有關的原始結果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」的前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 preds前5位的賠率......對原始數據的結尾。
我看過nlargest熊貓,但到目前爲止沒有運氣?
看起來不錯!我會放棄它,看起來可能會很慢,但至少它應該完成工作,希望可能有一些更好的功能,類似於我原來的樣子。所以我會離開',直到我有機會在上午覈實!謝謝。 – dartdog
我同意會有更優雅的方式。但就速度而言,與未知功能相比,它不會那麼糟糕。因爲它取決於特徵的數量而不是記錄或這種情況下的每個值。 '.apply(axis = 0)'方法應該在你的情況下只迭代260次(仍然每個260個向量將被處理爲一個向量)。我會留下這個評論,因爲他們故意在誤解的基礎上避開這種方法。 – su79eu7k
非常感謝,澄清我不得不修改如下,以獲得列標題和值添加到結果「eval_datan」n = 5#前N個功能 frames = [] framesv = [] predsdf.T .apply(lambda x:frames.append(x.sort_values(ascending = False).head(n).index.tolist()),axis = 0) predsdf.T.apply(lambda x:framesv.append(x .sort_values(ascending = False).head(n).tolist()),axis = 0) 和: eval_datan = eval_datan.join(pd.DataFrame(frames,columns = ['ccsp {}'.format(n +1)for n in range(n)])) eval_datan = eval_datan.join(pv.DataFrame(framesv,columns = ['oddsp {}'.format(n + 1)for n in range(n)])) ) – dartdog