2016-12-30 99 views
0

我的熊貓數據框在列中包含機器學習問題的所有可能的類,賦值給條目的值具有其概率的含義。如何根據預測類追加到熊貓數據框

接下來,我有一個機器學習模型,它可以爲火車案例提供類別預測。

現在我想添加一個新行,每預測,其中分配給預測班列的值變1

我如何可以追加到大熊貓數據幀依賴於預測類以高效和優雅的方式?

這是一些最起碼的示例代碼,做什麼,我想:

import pandas as pd 
import numpy as np 

predictions = np.array(['classB', 'classB', 'classC']) 
data = pd.DataFrame(columns=['classA', 'classB', 'classC']) 

print "Data before:" 
print data 

for i in range(len(predictions)): 
    if predictions[i] == "classA": 
     data.loc[i] = [1, 0, 0] 
    if predictions[i] == "classB": 
     data.loc[i] = [0, 1, 0] 
    if predictions[i] == "classC": 
     data.loc[i] = [0, 0, 1] 

print "Data after:" 
print data 

輸入:

Empty Dataframe, prediction = ['classB', 'classB', 'classC'] 

輸出:

classA classB classC 
0  0.0  1.0  0.0 
1  0.0  1.0  0.0 
2  0.0  0.0  1.0 

回答

1

你可能要考慮使用pandas.DataFrame.merge以擺脫forif構造。

您可以創建一個熊貓數據框架,將一個類映射到它的概率(例如'classA':[1,0,0])。之後將此映射與預測類合併。

例子:

import pandas as pd 
import numpy as np 

classes = ['classA', 'classB', 'classC'] 

predictionProbabilityMapping = pd.DataFrame(index=classes, columns=classes, data=[ 
     [1, 0, 0], 
     [0, 1, 0], 
     [0, 0, 1], 
]) 

def convertProbabilities(predictions): 
    predictionsDf = pd.DataFrame(columns=['classification'], data=predictions) 
    return pd.merge(predictionsDf, 
        predictionProbabilityMapping, 
        left_on='classification', right_index=True)[classes] 

predictions = np.array(['classB', 'classB', 'classC']) 
print convertProbabilities(predictions) 

其中產量:

 classA classB classC 
0  0  1  0 
1  0  1  0 
2  0  0  1 
+0

感謝您的回答! – johannesmik