核心:.loc用法
一、每日一题
表: Employees
+-------------+---------+ | 列名 | 类型 | +-------------+---------+ | employee_id | int | | name | varchar | | salary | int | +-------------+---------+ employee_id 是这个表的主键(具有唯一值的列)。 此表的每一行给出了雇员id ,名字和薪水。
编写解决方案,计算每个雇员的奖金。如果一个雇员的 id 是 奇数 并且他的名字不是以 'M' 开头,那么他的奖金是他工资的 100% ,否则奖金为 0 。
返回的结果按照 employee_id 排序。
返回结果格式如下面的例子所示。
示例 1:
输入: Employees 表: +-------------+---------+--------+ | employee_id | name | salary | +-------------+---------+--------+ | 2 | Meir | 3000 | | 3 | Michael | 3800 | | 7 | Addilyn | 7400 | | 8 | Juan | 6100 | | 9 | Kannon | 7700 | +-------------+---------+--------+ 输出: +-------------+-------+ | employee_id | bonus | +-------------+-------+ | 2 | 0 | | 3 | 0 | | 7 | 7400 | | 8 | 0 | | 9 | 7700 | +-------------+-------+ 解释: 因为雇员id是偶数,所以雇员id 是2和8的两个雇员得到的奖金是0。 雇员id为3的因为他的名字以'M'开头,所以,奖金是0。 其他的雇员得到了百分之百的奖金。
解答:
import pandas as pd
def calculate_special_bonus(employees: pd.DataFrame) -> pd.DataFrame:
# 创建一个新的列 'bonus' 并初始化为 0
employees['bonus'] = 0
# 条件: employee_id 是奇数并且名字不是以 'M' 开头
condition = (employees['employee_id'] % 2 != 0) & (~employees['name'].str.startswith('M'))
# 满足条件的行,他们的奖金是薪水的 100%
employees.loc[condition, 'bonus'] = employees['salary']
# 选择需要的列,并按照 employee_id 排序
result = employees[['employee_id', 'bonus']].sort_values(by='employee_id')
return result
总结:
这里用到了loc(),具体用法查看博客。
2024.5.22