Leetcode第176题。第二高薪水

问题描述 投票:0回答:1

表:员工

+-------------+------+
| 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                 |

我不明白为什么显示为错误答案,但我的输出和预期输出是相似的。 请帮助我理解错误。

python mysql pandas
1个回答
0
投票

iloc[[1]]
已经代表一个DataFrame,所以你不应该将它包装在一个列表中。从最后一个
[  ]
语句中删除那些包装
return
,这样就可以得到:

return pd.DataFrame(data = {'SecondHighestSalary':employee.salary.iloc[[1]]})
© www.soinside.com 2019 - 2024. All rights reserved.