一、每日一题
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| product_id | int |
| low_fats | enum |
| recyclable | enum |
+-------------+---------+
product_id
是该表的主键(具有唯一值的列)。
low_fats 是枚举类型,取值为以下两种 ('Y', 'N'),其中 'Y' 表示该产品是低脂产品,'N' 表示不是低脂产品。
recyclable 是枚举类型,取值为以下两种 ('Y', 'N'),其中 'Y' 表示该产品可回收,而 'N' 表示不可回收。
数据集如下:
data = [
['0', 'Y', 'N'],
['1', 'Y', 'Y'],
['2', 'N', 'Y'],
['3', 'Y', 'Y'],
['4', 'N', 'N']]
products = pd.DataFrame(data,
columns=['product_id', 'low_fats', 'recyclable'])
.astype({'product_id':'int64', 'low_fats':'category', 'recyclable':'category'})
示例: 输入: Products 表: +-------------+----------+------------+ | product_id | low_fats | recyclable | +-------------+----------+------------+ | 0 | Y | N | | 1 | Y | Y | | 2 | N | Y | | 3 | Y | Y | | 4 | N | N | +-------------+----------+------------+ 输出: +-------------+ | product_id | +-------------+ | 1 | | 3 | +-------------+
解答:
import pandas as pd
def find_products(products: pd.DataFrame) -> pd.DataFrame:
is_low_fats = products['low_fats'] == 'Y'
is_recyclable = products['recyclable'] == 'Y'
is_product_id = is_low_fats & is_recyclable
result = products[is_product_id]
return result[['product_id']]
题源:Leetcode
二、总结
本题考察布尔索引的运用。
布尔索引步骤
构建条件表达式:首先,你需要创建一个或多个表达式来表示你的筛选条件。对于数值类型的列,你可以直接比较大小;对于类别或其他类型的数据,可能需要使用.isin()等方法来匹配值。
应用条件:将这些条件应用到DataFrame上,这会返回一个布尔值的Series,其中True表示该行满足条件,False则不满足。
用作索引:最后,你可以直接把这个布尔Series用作DataFrame的索引来选取数据。
2024.5.18