pandas笔记(四)-- 第N高的薪水(去重、排序、含空值的数据表)
题目描述
查询employee表中第N高的工资,如果没有第n高的工资则返回null
如下所示:
测试用例
输入
| id | salary |
|---|---|
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
n=2
输出
| getNthHighestSalary(2) |
|---|
| 200 |
输入
| id | salary |
|---|---|
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
n=4
输出
| getNthHighestSalary(2) |
|---|
| null |
解析
思路
讲述看到这一题的思路
解题方法
首先需要除去
employee表中工资相同的行,再按照去重后的数据表进行查找,即
employee = employee.drop_duplicates(subset=["salary"]),随后判断
n值的范围是否超出数据表的索引范围,即if n > len(employee) or n <= 0
若超出则返回列索引为f"getNthHighestSalary({n})"的空表,若未超出则
进行排序、查找与返回操作,注意为返回的数据表进行重命名
代码
import pandas as pd
def nth_highest_salary(employee: pd.DataFrame, n: int) -> pd.DataFrame:
employee = employee.drop_duplicates(subset=["salary"])
if n > len(employee) or n <= 0:
return pd.DataFrame({f"getNthHighestSalary({n})": [None]})
df = employee.sort_values(by="salary", ascending=False)
return df[["salary"]].iloc[[n-1]].rename(columns={"salary": f"getNthHighestSalary({n})"})

浙公网安备 33010602011771号