176. 第二高的薪水
题目描述
题目示例
思路
获取第二高的工资:
先降序排序,再去重,找到第二高的工资数值,最后转换为题目中需要的格式;
方法
•排序:df.sort_values(by="列名", ascending=False)对特定列数据进行降序排序
•去重:df.drop_duplicates(subset="列名"),根据特定列数据进行行去重
•获取特定行列的数据:df.loc[索引,"列名"],注意,这里使用索引表示行数时,需要将去重后的数据索引重置;
•索引重置:df.reset_index(drop=True),drop=True表示不保存原始索引数据,False会将原始索引生成一个列保存在dataframe中;
•转换格式:pd.DataFrame({'列名':[数值]})可以生成pandas数据。
详解代码
详细注释的pandas求解代码:
import pandas as pd
def second_highest_salary(employee: pd.DataFrame) -> pd.DataFrame:
# employee 按工资salary的数值进行排序,并按降序排列
employee = employee.sort_values(by="salary", ascending=False)
# 删除重复的工资数据
employee = employee.drop_duplicates(subset="salary")
# 重置数据的索引,增加drop=True参数,不保留原始的索引
employee = employee.reset_index(drop=True)
# 获取第2高的工资,本题的返回格式比较简单,可以先取值再转为pandas的DataFrame结构
if len(employee) >= 2:
# 如果存在第二高的工资,便通过.loc函数根据索引和列名获取第二高的工资值
SecondHighestSalary = employee.loc[1,"salary"]
return pd.DataFrame({'SecondHighestSalary':[SecondHighestSalary]})
else:
# 如果不存在,便返回Null
return pd.DataFrame({'SecondHighestSalary':[None]})
领取专属 10元无门槛券
私享最新 技术干货