2016-12-30 90 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