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

Pandas DataFrame 행을 리스트로 그룹화하는 방법 – groupby와 apply(list) 활용하기

Pandas에서 DataFrame의 행을 리스트(list) 형태로 그룹화하려면 groupby()와 함께 apply() 함수를 사용하면 됩니다. 이 방법을 활용하면 특정 열을 기준으로 데이터를 묶고, 각 그룹에 속한 값들을 하나의 리스트로 정리할 수 있습니다.

1. 라이브러리 불러오기

먼저 필요한 Pandas 라이브러리를 임포트합니다.

import pandas as pd

2. 샘플 DataFrame 생성

예제를 위해 'Car'와 'Units' 두 개의 열을 가진 DataFrame을 만들어 보겠습니다.

dataFrame = pd.DataFrame(
    {
        "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
        "Units": [100, 150, 110, 80, 110, 90]
    }
)

3. apply(list)로 행 그룹화하기

'Car' 열을 기준으로 그룹화한 뒤, 'Units' 값을 리스트 형태로 변환합니다.

dataFrame = dataFrame.groupby('Car')['Units'].apply(list)

전체 예제 코드

지금까지의 과정을 하나의 코드로 정리하면 다음과 같습니다.

import pandas as pd

# DataFrame 생성
dataFrame = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
      "Units": [100, 150, 110, 80, 110, 90]
   }
)

print("DataFrame ...\n", dataFrame)

# DataFrame을 리스트로 그룹화
dataFrame = dataFrame.groupby('Car')['Units'].apply(list)

# 결과 출력
print("\nDataFrame ...\n", dataFrame)

실행 결과

위 코드를 실행하면 다음과 같은 출력이 나타납니다.

DataFrame ...
        Car   Units
0      BMW     100
1    Lexus     150
2     Audi     110
3  Mustang      80
4  Bentley     110
5   Jaguar      90

DataFrame ...
Car
Audi       [110]
BMW        [100]
Bentley    [110]
Jaguar      [90]
Lexus      [150]
Mustang     [80]
Name: Units, dtype: object

결과 해설

출력 결과를 보면 각 자동차 브랜드(Car)가 인덱스가 되고, 해당 브랜드의 판매 수량(Units)이 리스트 형태로 저장된 것을 확인할 수 있습니다. 예를 들어 Audi는 [110], BMW는 [100]처럼 각 그룹의 값들이 리스트로 묶였습니다.

만약 동일한 브랜드가 여러 번 등장하는 데이터라면, 해당 브랜드의 모든 수량이 하나의 리스트에 함께 담기게 됩니다. 예를 들어 'Audi'가 세 번 등장해 [110, 120, 130]과 같은 결과를 얻을 수 있습니다.

마무리

groupby()apply(list)의 조합은 범주형 데이터를 기준으로 값을 모아 리스트로 변환할 때 매우 유용합니다. 데이터 전처리나 집계 작업에서 자주 활용되니 꼭 익혀두시길 추천합니다.