[leetcode - 30 Days of Pandas] Day2

정대현·2023년 8월 21일

Day2. Data Filtering - Recyclable and Low Fat Products

Problem

Table: Products

Column NameType
product_idint
low_fatsenum
recyclableenum

product_id is the primary key (column with unique values) for this table.
low_fats is an ENUM (category) of type ('Y', 'N') where 'Y' means this product is low fat and 'N' means it is not.
recyclable is an ENUM (category) of types ('Y', 'N') where 'Y' means this product is recyclable and 'N' means it is not.

Write a solution to find the ids of products that are both low fat and recyclable.

Return the result table in any order.

The result format is in the following example.

Example 1:

Input:
Products table:

product_idlow_fatsrecyclable
0YN
1YY
2NY
3YY
4NN

Output:

product_id
1
3

Explanation: Only products 1 and 3 are both low fat and recyclable.

Solution

# my solution
import pandas as pd

def find_products(products: pd.DataFrame) -> pd.DataFrame:
    products = products[(products['low_fats'] == 'Y') & (products['recyclable'] == 'Y')]
    return products['product_id'].to_frame()
# check result

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'})

find_products(Products)

# the others

# 1.
def find_products(products: pd.DataFrame) -> pd.DataFrame:
    result_df = products[(products['low_fats'] == 'Y') & (products['recyclable'] == 'Y')]
    return result_df[['product_id']]
    
# 2.
def find_products(products: pd.DataFrame) -> pd.DataFrame:
    return products.query('low_fats == "Y" & recyclable == "Y"')[["product_id"]]

# 3.
def find_products(products: pd.DataFrame) -> pd.DataFrame:
    return products[
        (products['low_fats'] == 'Y') & \
        (products['recyclable'] == 'Y')
    ][['product_id']]

reference

leetcode - 30 Days of Pandas / Recyclable and Fat Products

0개의 댓글