2880. 数据选取
2880. 数据选取
题目
DataFrame
students
+-------------+--------+ | Column Name | Type | +-------------+--------+ | student_id | int | | name | object | | age | int | +-------------+--------+
Write a solution to select the name and age of the student with student_id = 101
.
The result format is in the following example.
Example 1:
Input:
+------------+---------+-----+ | student_id | name | age | +------------+---------+-----+ | 101 | Ulysses | 13 | | 53 | William | 10 | | 128 | Henry | 6 | | 3 | Henry | 11 | +------------+---------+-----+
Output:
+---------+-----+ | name | age | +---------+-----+ | Ulysses | 13 | +---------+-----+
Explanation: Student Ulysses has student_id = 101, we select the name and age.
题目大意
DataFrame
students
+-------------+--------+ | Column Name | Type | +-------------+--------+ | student_id | int | | name | object | | age | int | +-------------+--------+
编写一个解决方案,选择 student_id = 101
的学生的 name 和 age 并输出。
返回结果格式如下示例所示。
示例 1:
输入:
+------------+---------+-----+ | student_id | name | age | +------------+---------+-----+ | 101 | Ulysses | 13 | | 53 | William | 10 | | 128 | Henry | 6 | | 3 | Henry | 11 | +------------+---------+-----+
输出:
+---------+-----+ | name | age | +---------+-----+ | Ulysses | 13 | +---------+-----+
解释: 学生 Ulysses 的 student_id = 101,所以我们输出了他的 name 和 age。
解题思路
有三种方法:
布尔索引结合列选择
students["student_id"] == 101
生成一个布尔条件(True/False
)的 Series。students[...]
使用布尔索引,选出student_id
等于 101 的行。[["name", "age"]]
再从结果中选取指定列。
.loc[]
方法students["student_id"] == 101
同样生成布尔条件。.loc[rows, columns]
允许直接指定行和列,行通过布尔索引筛选,列通过显式列表选择。
.loc[]
方法选取行并扩展列范围students["student_id"] == 101
筛选出student_id
为 101 的行。"name":
表示从name
列开始,选择包括其后的所有列。
复杂度分析
- 时间复杂度:
O(n)
,筛选行需遍历每行(students["student_id"] == 101
),列选择只需访问指定列(如[["name", "age"]]
)。 - 空间复杂度:
O(1)
,返回结果是原数据的视图(若未显式复制),额外空间开销为O(1)
。
代码
import pandas as pd
def selectData(students: pd.DataFrame) -> pd.DataFrame:
return students[students["student_id"] == 101][["name", "age"]]
#OR
return students.loc[students["student_id"] == 101, ["name", "age"]]
#OR
return students.loc[students["student_id"] == 101, "name" :]