Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

pandas DataFrame의 모든 그룹에 집계 목록(list)을 적용하는 방법

개요

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()가 더 범용적으로 활용됩니다.