我有一个像这样的df,有很多行:
BB AA FF
2 5 0
3 7 A
6 5 A
9 6 A
8 3 0
还有这样的函数:
def test(a,b):
# a=array col AA
# b=array col BB
return (a*b)+a
我希望对于 FF 列中值为 != 0 的行,对涉及 BB 和 AA 列的 df 切片(数组(应用函数测试,以在新列 ZZ 中生成以下输出:
BB AA FF ZZ
2 5 0 0
3 7 A 28
6 5 A 35
9 6 A 51
8 3 0 0
我在想这样的事情:
df['zz']= df.apply(lambda x: test(df.AA,df.BB) for the range of values among zero)
但我的问题是我不确定如何在 FF 列中指定 de 数组以应用该列
您可以使用DataFrame.apply + mask:
def test(x):
return (x[0]*x[1])+x[0]
df['ZZ']=df[['AA','BB']].apply(test,axis=1).mask(df['FF'].eq('0'),0)
print(df)
BB AA FF ZZ
0 2 5 0 0
1 3 7 A 28
2 6 5 A 35
3 9 6 A 60
4 8 3 0 0
或者您可以使用lambda 函数:
df['ZZ']=df.apply(lambda x: x[['BB','AA']].prod()+ x['AA'] if x['FF'] != '0' else x['FF'],axis=1)
print(df)
BB AA FF ZZ
0 2 5 0 0
1 3 7 A 28
2 6 5 A 35
3 9 6 A 60
4 8 3 0 0