pandas 如何根据多个条件更新行中的值

3okqufwl  于 2023-04-19  发布在  其他
关注(0)|答案(1)|浏览(131)

我有一个如下的数据集,并试图根据某些条件更新员工以前和当前工资的加薪百分比,对于hike_percentage列,有些值没有正确更新,而是被指定为0。因此,下面的条件用于纠正hike_percentage列值

df

Employee  Previous_ctc Current_ctc Hike_perecentage
1         5000         10000       100
2         15000       20000         0
3         16000       18000         0
4         20000       20000         0

条件:考虑到上升百分比==0行考虑到当前CTC不等于0考虑到当前CTC不匹配先前CTC最后执行计算,即(ctc-先前CTC)/先前CTC)*100 -以获得百分比增加。
我们看到,在上面的数据集中,对于employee 2,3,hike_percentage值是不正确的,因此通过使用上面的条件,我们只得到employee 2,3行,输出应该如下所示

Expected output:

Employee  Previous_ctc Current_ctc Hike_perecentage
1         5000         10000       100
2         15000       20000        33.3
3         16000       18000        12.5
4         20000       20000         0

我已经尝试了多种方法建议,但其抛出错误。尝试下面的代码之一,并抛出错误,并没有更新预期的输出。

Code:

    df['Appraisal Percent'] = df['Current_ctc'].apply(lambda x:round((x['Current_ctc']- 
    x['Previous_ctc'])/x['Previous_ctc'])*100,decimals=1 if x!=0 elif x['Final Fixed 
    Compensation']!=x['Previous_ctc'])
pgvzfuti

pgvzfuti1#

使用mask

df['Hike_perecentage'] = df['Hike_perecentage'].mask(df['Hike_perecentage'].eq(0), df['Current_ctc'].sub(df['Previous_ctc']).div(df['Previous_ctc']))

eval可选:

df['Hike_perecentage'] = df['Hike_perecentage'].mask(df['Hike_perecentage'].eq(0), df.eval('(Current_ctc-Previous_ctc)/Previous_ctc'))

输出:

Employee  Previous_ctc  Current_ctc  Hike_perecentage
0         1          5000        10000        100.000000
1         2         15000        20000          0.333333
2         3         16000        18000          0.125000
3         4         20000        20000          0.000000

相关问题