表:员工
+-------------+------+
| Column Name | Type |
+-------------+------+
| id | int |
| salary | int |
+-------------+------+
id 是该表的主键(具有唯一值的列)。 该表的每一行都包含有关员工工资的信息。
编写一个解决方案,从 Employee 表中查找第二高的不同工资。如果没有第二高的工资,则返回 null(Pandas 中返回 None)。 结果格式如下例所示。
示例1:
输入: 员工表:
+----+--------+
| id | salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
输出:
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
示例2:
输入: 员工表:
+----+--------+
| id | salary |
+----+--------+
| 1 | 100 |
+----+--------+
输出:
+---------------------+
| SecondHighestSalary |
+---------------------+
| null |
+---------------------+
在这个问题中,我在 pandas 中尝试过,我的代码是这样的:
import pandas as pd
def second_highest_salary(employee: pd.DataFrame) -> pd.DataFrame:
employee.salary = employee.salary.drop_duplicates().reset_index(drop = True)
employee = employee.sort_values(by = 'salary',ascending = False)
if employee.shape[0] < 2:
return pd.DataFrame(data = {'SecondHighestSalary':[None]})
else:
return pd.DataFrame(data = {'SecondHighestSalary':[employee.salary.iloc[[1]]]})
对于测试用例
| id | salary |
| -- | ------ |
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
预期输出是:
| SecondHighestSalary |
| ------------------- |
| 200 |
我的输出也是一样的:
| SecondHighestSalary |
| ------------------- |
| 200 |
我不明白为什么显示为错误答案,但我的输出和预期输出是相似的。 请帮助我理解错误。
iloc[[1]]
已经代表一个DataFrame,所以你不应该将它包装在一个列表中。从最后一个 [ ]
语句中删除那些包装 return
,这样就可以得到:
return pd.DataFrame(data = {'SecondHighestSalary':employee.salary.iloc[[1]]})