Pandas Exercise-leetcode1873计算特殊奖金

[复制链接]
乐陶99音乐 发表于 2023-9-6 15:18:59|来自:中国农业大学 | 显示全部楼层 |阅读模式
问题描述

Employees 表:
列名类型
employee_idint
namevarchar
salaryint
employee_id 是这个表的主键(具有唯一值的列)。
此表的每一行给出了雇员id ,名字和薪水。
任务:
编写解决方案,计算每个雇员的奖金。如果一个雇员的 id 是 奇数 并且他的名字不是以 'M' 开头,那么他的奖金是他工资的 100% ,否则奖金为 0 。
返回的结果按照 employee_id 排序。
示例 1:
输入:
Employees 表:
employee_idnamesalary
2Meir3000
3Michael3800
7Addilyn7400
8Juan6100
9Kannon7700
输出:
employee_idbonus
20
30
77400
80
97700
解释:
因为雇员id是偶数,所以雇员id 是2和8的两个雇员得到的奖金是0。
雇员id为3的因为他的名字以'M'开头,所以,奖金是0。
其他的雇员得到了百分之百的奖金。
创建数据集

# 创建Employees表的DataFrame
employees_data = {
    'employee_id': [2, 3, 7, 8, 9],
    'name': ["Meir", "Michael", "Addilyn", "Juan", "Kannon"],
    'salary': [3000, 3800, 7400, 6100, 7700]
}

employees_df = pd.DataFrame(employees_data)
employees_df
employee_idnamesalary
02Meir3000
13Michael3800
27Addilyn7400
38Juan6100
49Kannon7700
解答

# 方法1:使用apply()函数和条件判断
def calculate_bonus(row):
    if row['employee_id'] % 2 == 1 and not row['name'].startswith('M'):
        return row['salary']
    else:
        return 0
employees_df['bonus'] = employees_df.apply(calculate_bonus, axis=1)
result_1 = employees_df[['employee_id', 'bonus']].sort_values(by='employee_id')
result_1
employee_idbonus
020
130
277400
380
497700
# 方法2:使用条件索引和np.where()
import numpy as np
condition = (employees_df['employee_id'] % 2 == 1) & (~employees_df['name'].str.startswith('M'))
employees_df['bonus'] = np.where(condition, employees_df['salary'], 0)
result_2 = employees_df[['employee_id', 'bonus']].sort_values(by='employee_id')
result_2
employee_idbonus
020
130
277400
380
497700
知识点

以下是上述答案所涉及到的pandas知识点:
(1)使用 apply() 函数:用于对DataFrame或Series的每个元素执行特定的函数。在此,我们使用它来根据条件判断计算奖金。
(2)条件索引:使用布尔表达式(如 employees_df['employee_id'] % 2 == 1)对DataFrame进行过滤,得到满足条件的行。
(3)str.startswith() 函数:这是一个专门用于检查DataFrame或Series中的字符串是否以给定的子串开头的函数。
(4)使用 np.where() 函数


    • np.where() 函数用于基于条件返回两个可选值之一。在这种情况下,我们使用它来返回薪水值或 0,具体取决于给定的条件是否为真。

(5)选择DataFrame的列:使用双方括号 (例如 [['employee_id', 'bonus']]) 从DataFrame中选择多列。
  如有其他解法或者问题,欢迎留言或私信~
全部回复0 显示全部楼层
暂无回复,精彩从你开始!

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则