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})"})