df-drills pandas · Polars · DuckDB SQL · DuckDB Relational 题目列表 登录

条件赋值

简单 22-pandas-only pandas 专属 locassignmentcopy-on-write

按下面两条规则给员工调整月薪 salary,输出调整后的全部员工。

  1. dept_id 为 4 或 6、且 hire_date 早于 2021-01-01 的员工,salary 加 3000。
  2. title 里含有 Junior(区分大小写)的员工,salary 再加 1000。两条规则都满足时两次加薪都生效。

  3. dept_id、hire_date、title 为 null 的行都视为不满足对应条件。

  4. 不满足任何规则的员工原样输出。

提醒:pandas 3 默认启用 Copy-on-Write,“先按条件取出子表,再对子表的列赋值”这种链式赋值不会改到原表(只会给一个警告)。要在一步里同时指定行条件和列名来赋值。

输入

  • employees(emp_id, name, dept_id, manager_id, hire_date, salary, title, email)

输出

列为 emp_id, name, salary,包含所有员工,行顺序不限。

输入表 (case base,共 2 个 case:base、edge)

employees hr/employees
#emp_idint64namestringdept_idint64manager_idint64hire_datedatesalaryint64titlestringemailstring
1 1 Grace Liu 1 null 2015-10-01 98000 CEO grace.liu@corp.example
2 2 Leo Wang 2 1 2017-09-09 72000 VP Engineering leo.wang@corp.example
3 3 Sara Chen 3 1 2020-06-05 70000 VP Sales sara.chen@corp.example
4 4 Lucas Zhang 4 2 2023-04-20 52000 Engineering Manager lucas.zhang@corp.example
5 5 Mia Zhao 5 2 2016-07-16 52000 Data Manager mia.zhao@corp.example
6 6 Kevin Wu 3 3 2016-10-23 45000 Sales Manager kevin.wu@corp.example
7 7 Lily Xu 6 4 2025-03-17 48000 Infra Lead lily.xu@corp.example
8 8 Tom Huang 4 4 2022-01-03 46000 Senior Engineer tom.huang@corp.example
9 9 Liam Zhou 4 4 2020-10-01 39000 Software Engineer liam.zhou@corp.example
10 10 Nina Yang 4 4 2020-10-02 39000 Software Engineer nina.yang@corp.example
11 11 Oscar Lin 4 8 2022-07-15 26000 Junior Engineer oscar.lin@corp.example
12 12 Linda Ma 5 5 2016-08-25 41000 Data Engineer linda.ma@corp.example
13 13 Eric Sun 5 5 2021-09-09 33000 Data Analyst eric.sun@corp.example
14 14 Ivy He 5 5 2018-05-29 41000 Data Engineer ivy.he@corp.example
15 15 Lei Gao 5 12 2016-06-02 27000 Junior Data Engineer lei.gao@corp.example
16 16 Hao Guo 6 7 2016-12-18 44000 Site Reliability Engineer hao.guo@corp.example
17 17 Fang Luo 6 7 2020-11-11 38000 Infra engineer fang.luo@corp.example
18 18 Jun Liang 6 16 2020-09-08 25000 Junior Engineer jun.liang@corp.example
19 19 Dana Song 3 6 2016-10-13 31000 Account Executive dana.song@corp.example
20 20 Victor Tang 3 6 2018-09-12 31000 Account Executive victor.tang@corp.example
显示前 20 行,共 40 行

期望输出 (case base,行顺序不限)

#emp_idInt64nameStringsalaryInt64
1 1 Grace Liu 98000
2 2 Leo Wang 72000
3 3 Sara Chen 70000
4 4 Lucas Zhang 52000
5 5 Mia Zhao 52000
6 6 Kevin Wu 45000
7 7 Lily Xu 48000
8 8 Tom Huang 46000
9 9 Liam Zhou 42000
10 10 Nina Yang 42000
11 11 Oscar Lin 27000
12 12 Linda Ma 41000
13 13 Eric Sun 33000
14 14 Ivy He 41000
15 15 Lei Gao 28000
16 16 Hao Guo 47000
17 17 Fang Luo 41000
18 18 Jun Liang 29000
19 19 Dana Song 31000
20 20 Victor Tang 31000
21 21 Wen Han 29500
22 22 Lu Feng 36000
23 23 Yan Deng 12000
24 24 Zoe Cao 61000
25 25 Ping Peng 37000
26 26 Qing Xie 30000
27 27 Rui Lu 22000
28 28 Uma Jiang 24000
29 29 Xin Cai 47000
30 30 Bob Pan 53000
31 31 Chen Du 38000
32 32 Amy Yu 46500
33 33 Larry Ren 66000
34 34 Wei Shi 27000
35 35 Zhang Min 40000
36 36 王磊 28000
37 37 李静 23000
38 38 Henry Kong 29000
39 39 Logan Bai 46000
40 40 Sophie Fan 28000
共 40 行