[문제]
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 |