Python 按列条件计算的DataFrame列

Python 按列条件计算的DataFrame列,python,pandas,dataframe,Python,Pandas,Dataframe,我是Python新手,我试图根据同一数据帧的另一列的条件计算数据帧的一个新列 我有一个包含a、B、C、D、E列的数据框 我需要计算新的F列: F = A - B if E == 'Y' F = A - (C + D) if E == 'N' 我试图使用函数Apply,但它不起作用 这是我的密码: def my_funcion(column): if column == 'N' : return df['B'] if column== 'Y' :

我是Python新手,我试图根据同一数据帧的另一列的条件计算数据帧的一个新列

我有一个包含a、B、C、D、E列的数据框

我需要计算新的F列:

F = A - B if E == 'Y'
F = A - (C + D) if E == 'N'
我试图使用函数
Apply
,但它不起作用

这是我的密码:

def my_funcion(column): 
    if column == 'N' :
        return df['B']
    if column== 'Y' :
        return (df['C'] + df['D'])
df['F'] = df['A'] - df.apply(myfunction(df['E'], axis=1) 
但它告诉我这个错误:

ValueError:('序列的真值不明确。请使用a.empty, a、 bool()、a.item()、a.any()或a.all(),u'出现在索引0'

我认为你可以使用:

如果
E
中的值仅为
Y
N
值,则解决方案如下:

np.random.seed(145)
df = pd.DataFrame(np.random.randint(10,size=(5,4)), columns=list('ABCD'))
df['E'] = ['Y'] * 3 + ['N'] * 2 

df['F'] = np.where(df['E'] == 'Y', df['A'] - df['B'], df['A'] - (df['C'] + df['D']))
print (df)

   A  B  C  D  E   F
0  5  5  6  7  Y   0
1  2  5  8  5  Y  -3
2  1  2  0  8  Y  -1
3  4  5  8  9  N -13
4  1  6  7  6  N -12
如果列
E
中的解决方案不仅是
N
Y

np.random.seed(145)
df = pd.DataFrame(np.random.randint(10,size=(5,4)), columns=list('ABCD'))
df['E'] = ['Y'] * 2 + ['N'] * 2  + ['X']

df['F'] = np.where(df['E'] == 'Y', df['A'] - df['B'], 
          np.where(df['E'] == 'N', df['A'] - (df['C'] + df['D']), 100))
print (df)

   A  B  C  D  E    F
0  5  5  6  7  Y    0
1  2  5  8  5  Y   -3
2  1  2  0  8  N   -7
3  4  5  8  9  N  -13
4  1  6  7  6  X  100
如果需要,请使用
应用
(slowier):


谢谢@jezrael,现在它可以工作了……但我需要定义该函数,因为我需要在代码的不同部分使用它。因此,如果我想定义该函数,我可以如何更改我的代码?很高兴能提供帮助!如果我的回答有用,请不要忘记。谢谢。对不起,我编辑了我的第一条评论,因为我需要问你另一个问题。请阅读my第一个注释..只是一个问题。如果我想在另一列上添加一个条件,例如Z列不同于0(零),我必须写:np。其中(df['E']='y'和df['Z']!=0,df['a']-df['B'])?但它显示了一个错误。你能帮我正确地写吗?Z列是一个浮点64
def my_funcion(column): 
    if column['E'] == 'Y' :
        return column['B']
    if column['E'] == 'N' :
        return (column['C'] + column['D'])

df['F'] = df['A'] - df.apply(my_funcion, axis=1) 
print (df)

   A  B  C  D  E   F
0  5  5  6  7  Y   0
1  2  5  8  5  Y  -3
2  1  2  0  8  N  -7
3  4  5  8  9  N -13
4  1  6  7  6  N -12