코딩 테스트/Pandas

101. Product Sales Analysis III

susinlee 2025. 1. 6. 09:56

[문제]

https://leetcode.com/problems/product-sales-analysis-iii/description/

 

[풀이]

1. product_id 별로 연도가 가장 작은 행을 집계하고

2. 기존 테이블과 product_id와 year를 키로 병합

3. 병합한 테이블에서 제출 형식에 맞게 열을 선택하고 이름을 바꿔준다

 

Pandas

import pandas as pd

def sales_analysis(sales: pd.DataFrame, product: pd.DataFrame) -> pd.DataFrame:
    t1 = sales.groupby('product_id')['year'].min().reset_index(name='year')
    merged = t1.merge(sales, on=['product_id', 'year'], how='inner').drop('sale_id', axis=1)
    return merged.rename(columns={'year' : 'first_year'})
    
    # rank 메소드를 이용한 방법
    # sales['rnk'] = sales.groupby('product_id')['year'].rank(method='dense')
    # df = sales[sales['rnk'] == 1][['product_id', 'year', 'quantity', 'price']]
    # return df.rename(columns={'year' : 'first_year'})
    
    # transform 메소드를 이용한 방법
    # sales['first_year'] = sales.groupby('product_id').year.transform(min)
    # return sales[sales.year == sales.first_year][['product_id', 'first_year', 'quantity', 'price']]

 

SQL

SELECT 
    product_id
    , year AS first_year
    , quantity
    , price
FROM Sales
WHERE (product_id, year) in (SELECT 
                                product_id
                                , MIN(year)   
                            FROM Sales
                            GROUP BY product_id)

'코딩 테스트 > Pandas' 카테고리의 다른 글

103. Find Followers Count  (0) 2025.01.08
102. Classes More Than 5 Students  (0) 2025.01.07
100. User Activity for the Past 30 Days I  (0) 2025.01.05
Game Play Analysis IV  (0) 2025.01.01
Immediate Food Delivery II  (0) 2024.12.31