1873. 计算特殊奖金

表: Employees

+-------------+---------+
| 列名        | 类型     |
+-------------+---------+
| employee_id | int     |
| name        | varchar |
| salary      | int     |
+-------------+---------+
employee_id 是这个表的主键(具有唯一值的列)。
此表的每一行给出了雇员id ,名字和薪水。

编写解决方案,计算每个雇员的奖金。如果一个雇员的 id 是 奇数 并且他的名字不是以 'M' 开头,那么他的奖金是他工资的 100% ,否则奖金为 0 。

返回的结果按照 employee_id 排序。

解题思路1

1.新增字段'bonus'

2.进行条件判断

employees['bonus'] = 0   

# 新增字段'bonus'
employees['bonus'] = 0
# 在总行数里进行循环
for i in range(employees.shape[0]):
    # 判断第i行,'employee_id'值是否为奇数
    if int(employees.loc[i, 'employee_id']) % 2 != 0:
    # 判断第i行,'name'值是否为'M'开头
        if not employees.loc[i,'name'].startswith('M'):
    # 如果符合条件,就第i行,'bonus'值=第i行,'salary'值
            employees.loc[i, 'bonus'] = employees.loc[i, 'salary']
        # 否则为0        
        else:
           employees.loc[i, 'bonus'] == 0
     # 否则为0 
    else:
        employees.loc[i, 'bonus'] == 0
# 选取列
df = employees[['employee_id', 'bonus']]
# 排序,默认升序,ascending=True
df =df.sort_values(by = 'employee_id')

解题思路2

使用条件表达式

# 新增一列'bonus',使用条件表达式,axis=1代表对每行进行计算,如果axis=0就是对每列进行计算
employees['bonus'] = employees.apply(
        lambda x: x['salary'] if x['employee_id'] % 2 and not x['name'].startswith('M') else 0, 
        axis=1
    )
# 选取列,并进行排序
df = employees[['employee_id', 'bonus']].sort_values('employee_id')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值