使用函数根据列满足的条件在 Pandas 中创建新列

pra*_*har 3 python dataframe python-2.7 pandas

我在熊猫数据框中有几列。基于每一列,我需要创建一个新列。此功能有效:

def f(row):
    if row['col_1'] == 0:
        val = 'Neutral'
    elif row['col_1'] > 0:
        val = 'Growth'
    else:
        val = 'Contraction'
    return val

df['New_Col_1'] = df.apply(f(row) , axis=1)
Run Code Online (Sandbox Code Playgroud)

但是由于我有几个要比较的列(col_2、col_3 等),我想将列的名称作为函数中的参数传递。

def f(row,col_name):
    if row[col_name] == 0:
        val = 'Neutral'
    elif row[col_name] > 0:
        val = 'Growth'
    else:
        val = 'Contraction'
    return val

df['New_Col_1'] = df.apply(f(row,'col_1') , axis=1)
Run Code Online (Sandbox Code Playgroud)

但是,有一个错误。它说未定义参数“行”。我如何克服这个问题?

Mat*_*hew 5

检查一下df.loc[],它需要两个参数,您可以将它们视为行规范和列规范,因此您可以像这样使用它:

df['New_Col_1'] = 'Contraction' # Default, to be overwritten below
df.loc[df['col_1'] == 0, 'New_Col_1'] = 'Neutral'
df.loc[df['col_1'] > 0, 'New_Col_1'] = 'Growth'
Run Code Online (Sandbox Code Playgroud)