프로그래밍/Python 관련 정보
[Pandas문제풀이 - groupby + apply의 활용] Group Sold Products By The Date
물박사의 저장공간
2025. 4. 27. 21:17
2025.02.24 - [프로그래밍/Python 관련 정보] - [Pandas] Table of Contents
group by + agg로 각기 다른 칼럼에 다른 함수를 적용할 수 있다는 말씀은 드린바 있습니다. 그러면 어떤식으로 이런 상황을 응용해 볼 수 있을까요? 풀이하는데 상당히 까다롭다고 생각했던 문제를 스크랩해두고자 합니다.
각 날짜별로 몇 가지의 상품의 판매되었는지 산출하고 판매된 상품명을 한 칼럼에 나열하는 것이 목적입니다.
pivot을 활용하면 열방향으로 제품을 확장할 수는 있긴한데.. 이 문제에서 원하는 것은 그런 방식이 아니죠.
import pandas as pd
def categorize_products(activities: pd.DataFrame) -> pd.DataFrame:
# sell_date 별로 그룹화
grouped = activities.groupby('sell_date')
# 1. num_sold : unique product 개수
num_sold = grouped['product'].nunique()
# 2. products : unique product들을 정렬해서 ','로 이어붙이기
products = grouped['product'].apply(lambda x: ','.join(sorted(x.unique())))
# 결과를 하나의 DataFrame으로 합치기
result = pd.DataFrame({
'sell_date': num_sold.index,
'num_sold': num_sold.values,
'products': products.values
})
return result
Pandas 1.2버전 이상의 Name Aggregation이 지원되는 버전이라면 아래와 같이 간단히 쓸 수도 있습니다.
def categorize_products(activities: pd.DataFrame) -> pd.DataFrame:
return activities.groupby(
'sell_date'
)['product'].agg([
('num_sold', 'nunique'),
('products', lambda x: ','.join(sorted(x.unique())))
]).reset_index()
다른 포스팅에서 언급한 바와 같이 groupby 이후에 집계 매서드를 적용하는 것은 '그룹화' 된 상태에서 적용하는 것일 뿐 기본적으로 데이터프레임에서 집계 매서드를 사용하는 것과 같습니다.
unique() 메서드는 특정 컬럼의 고유한 값들만 뽑아서 1차원 배열로 반환하는 매서드입니다. groupby 후에 적용한다는 것은 "그룹 별"로 고유한 값들을 뽑아서 1차원 배열로 반환한다는 뜻입니다.