susinlee 님의 블로그

110. Product Price at a Given Date 본문

코드카타/Pandas

110. Product Price at a Given Date

susinlee 2025. 1. 18. 10:38

[문제]

https://leetcode.com/problems/product-price-at-a-given-date/description/

 

[풀이]

1. 2019-08-16을 포함한 이전 날짜들만 필터링하고 product_id는 오름차순, change_date는 내림차순으로 정렬해준다.

2. id 기준으로 중복행을 제거하되 첫번째 행은 제외한다. 완성된 테이블에서 product_id와 new_price열만 가져온다

3. 위의 테이블과 products 테이블에서 고유 product_id만 필터링한 테이블과 병합한다. 고유 product_id 테이블 기준으로 left join해주고, null값을 10으로 채워준 뒤 열이름 조건에 맞게 반환해준다.

 

Pandas

last_price = products[products['change_date'] <= '2019-08-16'].sort_values(by=['product_id', 'change_date'], ascending=[True, False]).drop_duplicates(subset=['product_id'])[['product_id', 'new_price']]
    
    return pd.merge(products[['product_id']].drop_duplicates(), last_price, how='left').fillna(10).rename(columns={'new_price':'price'})

 

SQL

SELECT 
    DISTINCT(product_id)
    , 10 AS price
FROM Products
GROUP BY product_id
HAVING MIN(change_date) > '2019-08-16'
UNION ALL
SELECT product_id, new_price
FROM Products
WHERE (product_id, change_date) IN (SELECT product_id, MAX(change_date)
                                    FROM Products
                                    WHERE change_date <= '2019-08-16'
                                    GROUP BY product_id)

'코드카타 > Pandas' 카테고리의 다른 글

113.  (0) 2025.01.20
111. Last Person to Fit in the Bus  (0) 2025.01.19
109. Consecutive Numbers  (0) 2025.01.17
112. Count Salary Categories  (0) 2025.01.16
108. Triangle Judgement  (0) 2025.01.15