表: 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')