熊猫Data.frame分配问题

时间:2020-01-03 18:10:08

标签: python pandas

我想使用.assign函数添加新列。

df = pd.DataFrame({'A': range(1, 5), 'B': range(11, 15)})

def delta(df):

    df = df.assign(df_delta = df.A - df.B,
                   df_multiply = df_delta*30
                   )

    return df


print(delta(df))

但收到此错误

NameError:名称'df_delta'未定义

2 个答案:

答案 0 :(得分:1)

在赋值函数中尚未定义df_delta列,您可以使用temp变量来规避此错误:

df = pd.DataFrame({'A': range(1, 5), 'B': range(11, 15)})

def delta(df):
    a_b = df.A - df.B
    df = df.assign(df_delta = a_b, df_multiply = a_b*30)
    return df

print(delta(df))

打印:

   A   B  df_delta  df_multiply
0  1  11       -10         -300
1  2  12       -10         -300
2  3  13       -10         -300
3  4  14       -10         -300

答案 1 :(得分:1)

或者您可以使用lambda来实现这一点,它可以读取已分配的列:

def delta(df):
    df = df.assign(df_delta = df.A - df.B, df_multiply = lambda x : x['df_delta']*30)
    return df

print(delta(df))

   A   B  df_delta  df_multiply
0  1  11       -10         -300
1  2  12       -10         -300
2  3  13       -10         -300
3  4  14       -10         -300