Python 按列条件计算的DataFrame列
我是Python新手,我试图根据同一数据帧的另一列的条件计算数据帧的一个新列 我有一个包含a、B、C、D、E列的数据框 我需要计算新的F列: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' :
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