将功能映射到数据框

时间:2019-12-21 02:53:20

标签: python pandas

我试图将函数应用于熊猫中的数据框。我试图将两列用作位置参数并将一个函数映射到它。下面是我尝试的代码。 代码:

df_a=pd.read_csv('5_a.csv')
def y_pred(x):
    if x<.5:
        return 0
    else:
        return 1
df_a['y_pred']=df_a['proba'].map(y_pred)
def confusion_matrix(act,pred):
    if act==1 and act==pred:
        return 'TP'
    elif act==0 and act==pred:
        return 'TN'
    elif act==0 and pred==1:
        return 'FN'
    elif act==1 and pred==0:
        return 'FP'
df_a['con_mat_label']=df_a[['y','y_pred']].apply(confusion_matrix)

但是该函数未考虑将y_pred作为第二列并将其映射到已定义函数中的pred变量。 我得到这个错误: TypeError: ("confusion_matrix() missing 1 required positional argument: 'pred'", 'occurred at index y')

2 个答案:

答案 0 :(得分:1)

apply函数一个接一个地获取每一列,通过该函数运行它并返回一个转换后的列。这是pandas documentation上的更多文档。 您的设置对于列表理解会更好。这里是如何获得预期的行为:

df_a['con_mat_label'] = [confusion_matrix(act,pred) for (act,pred) in df[['y','y_pred']].to_numpy()]

希望有帮助!

答案 1 :(得分:1)

作为apply方法的一部分传递的函数中作为参数得到的是pandas series,使用axis参数可以指定是否必须为{{1 }}或row

因此,您需要将column函数修改为

  • 我假设confusion_matrix与此处的列名act相对应*
y

您需要将对def confusion_matrix(row): if row.y==1 and row.y==row.y_pred: return 'TP' elif row.y==0 and row.y==row.y_pred: return 'TN' elif row.y==0 and row.y_pred==1: return 'FN' elif row.y==1 and row.y_pred==0: return 'FP' 的呼叫修改为

apply

现在,让我给您一些有关如何改进代码的提示。

假设您有一个这样的数据框:

df_a['con_mat_label']=df_a[['y','y_pred']].apply(confusion_matrix, axis=1)

要添加>>> df X Y 0 1 4 1 2 5 2 3 6 3 4 7

Y_pred

哦,顺便说一句,我希望您引荐您到这个有趣的博客post