熊猫:如何将列名传递给可以在“应用”中使用的函数?

时间:2017-08-11 07:07:06

标签: python function pandas

我有一个功能:

def logit_categorisation(row, column_name):
    val = 0
    if row[column_name] > 0.6:
       val = 1
    elif 0.4 < row[column_name] < 0.6:
       val = 2
    else:
       val = 0
    return val

然后我想在下面使用它:

def create_logit_value(df, name_of_column, d):
    df[name_of_column] = df.apply(general_logit, args=(d,), axis=1)
    df[name_of_column + '_category'] = df.apply(logit_categorisation, args=(df[name_of_column],), axis=1)

并应用这样的功能:

create_logit_value(r, "the_test_column", {'age':-.02742, 'dlco': 0.0053058 })

我收到此错误(对于create_logit_value函数中的第二行):

 ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index 0')

我认为这是因为当我调用row [column_name]而不是离散值时,我在logit_categorisation函数中传递了一个系列,但我不知道如何以这种方式提取值。

1 个答案:

答案 0 :(得分:1)

可能最好不要这样做。您的函数仅使用行和列名称对单个值进行操作。所以只需让你的函数直接接受值(也就是你当前调用的值row[column_name])作为参数,然后就可以了:

df[name_of_column + '_category'] = df[name_of_column].map(logit_categorization)