在 Pandas 中的不同行范围上应用定义的函数



我有一个像这样的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

最新更新