개요
pandas에서 groupby()로 그룹화한 데이터에 집계 목록(list)을 적용하려면 agg() 메서드를 사용하면 됩니다. agg(list)처럼 내장 자료형인 list를 인자로 전달하면, 각 그룹에 속한 값들이 하나의 리스트로 묶여 집계됩니다.
먼저 필요한 라이브러리를 임포트합니다.
import pandas as pd
DataFrame 생성하기
'Car'(차종)와 'Units'(수량) 두 개의 열을 가진 예제 DataFrame을 만들어 보겠습니다. 차종별로 중복된 값이 존재하도록 구성했습니다.
dataFrame = pd.DataFrame(
{
"Car": ['BMW', 'Lexus', 'Lexus', 'Mustang', 'Bentley', 'Mustang'],
"Units": [100, 150, 110, 80, 110, 90]
}
)agg() 메서드에 list 적용하기
groupby('Car')로 'Car' 열을 기준으로 그룹화한 뒤, agg(list)를 호출하여 각 그룹의 값들을 리스트 형태로 모읍니다.
dataFrame = dataFrame.groupby('Car').agg(list)전체 예제 코드
지금까지의 과정을 하나로 합친 전체 코드는 다음과 같습니다.
import pandas as pd
# DataFrame 생성
dataFrame = pd.DataFrame(
{
"Car": ['BMW', 'Lexus', 'Lexus', 'Mustang', 'Bentley', 'Mustang'],
"Units": [100, 150, 110, 80, 110, 90]
}
)
print("DataFrame ...\n", dataFrame)
# agg() 메서드에 list를 인자로 지정
dataFrame = dataFrame.groupby('Car').agg(list)
# 리스트가 집계된 DataFrame 출력
print("\nDataFrame ...\n", dataFrame)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
DataFrame ...
Car Units
0 BMW 100
1 Lexus 150
2 Lexus 110
3 Mustang 80
4 Bentley 110
5 Mustang 90
DataFrame ...
Units
Car
BMW [100]
Bentley [110]
Lexus [150, 110]
Mustang [80, 90]결과 해석
출력 결과를 보면 'Lexus'는 150과 110이라는 두 개의 값이 [150, 110]으로, 'Mustang'은 80과 90이 [80, 90]으로 각각 하나의 리스트에 담긴 것을 확인할 수 있습니다. 반면 'BMW'와 'Bentley'는 단일 값을 가지므로 [100], [110]처럼 요소가 하나인 리스트로 집계됩니다.
이 방식은 특정 카테고리별로 원본 값을 모두 보존해야 할 때 유용합니다. 참고로 pandas 버전에 따라 .agg(list) 대신 .apply(list)를 사용해도 동일한 결과를 얻을 수 있으며, 여러 열에 동시에 적용할 수 있다는 점에서 agg()가 더 범용적으로 활용됩니다.