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

Python – Pandas 데이터프레임을 그룹화한 후 그룹 크기별로 정렬하는 방법

Pandas 데이터프레임을 그룹화하려면 groupby() 메서드를 사용합니다. 그룹화된 결과를 오름차순 또는 내림차순으로 정렬할 때는 sort_values()를 활용하고, 각 그룹의 크기(개수)를 구할 때는 size() 메서드를 사용합니다.

오름차순 정렬을 원한다면 sort_values()에 다음 옵션을 지정합니다.

ascending=True

반대로 내림차순 정렬을 원한다면 아래와 같이 지정합니다.

ascending=False

1. 데이터프레임 생성

먼저 예제로 사용할 Pandas 데이터프레임을 만들어 보겠습니다.

dataFrame = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Audi', 'Mercedes', 'Jaguar', 'Bentley'],
      "Reg_Price": [1000, 1400, 1000, 900, 1700, 900]
   }
)

위 코드는 자동차 이름(Car)과 등록 가격(Reg_Price) 두 개의 열을 가진 데이터프레임을 생성합니다.

2. 그룹화 후 내림차순 정렬

Reg_Price 열을 기준으로 그룹화하고, 그룹 크기를 내림차순으로 정렬하려면 다음과 같이 작성합니다.

dataFrame.groupby('Reg_Price').size().sort_values(ascending=False)

3. 그룹화 후 오름차순 정렬

같은 방식으로 오름차순으로 정렬하려면 ascending 값을 True로 변경합니다.

dataFrame.groupby('Reg_Price').size().sort_values(ascending=True)

전체 예제 코드

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

import pandas as pd

# Reg_Price 열이 포함된 데이터프레임 생성
dataFrame = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Audi', 'Mercedes', 'Jaguar', 'Bentley'],
      "Reg_Price": [1000, 1400, 1000, 900, 1700, 900]
   }
)

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

# Reg_Price 열을 기준으로 그룹화한 뒤 내림차순 정렬
print("\n내림차순 정렬 결과...\n")
print(dataFrame.groupby('Reg_Price').size().sort_values(ascending=False))

# Reg_Price 열을 기준으로 그룹화한 뒤 오름차순 정렬
print("\n오름차순 정렬 결과...\n")
print(dataFrame.groupby('Reg_Price').size().sort_values(ascending=True))

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

DataFrame...
        Car   Reg_Price
0       BMW        1000
1      Lexus        1400
2       Audi        1000
3   Mercedes         900
4     Jaguar        1700
5    Bentley         900

내림차순 정렬 결과...

Reg_Price
1000    2
900     2
1700    1
1400    1
dtype: int64

오름차순 정렬 결과...

Reg_Price
1400    1
1700    1
900     2
1000    2
dtype: int64

결과 해석

실행 결과를 보면 등록 가격이 1000인 그룹(BMW, Audi)과 900인 그룹(Mercedes, Bentley)에는 각각 2개의 행이 속해 있고, 1400(Lexus)과 1700(Jaguar) 그룹에는 1개씩만 속해 있습니다. 내림차순 정렬 시 개수가 많은 그룹이 먼저 표시되며, 개수가 같은 그룹 사이에는 인덱스 값(여기서는 Reg_Price)을 기준으로 정렬됩니다. 이처럼 groupby(), size(), sort_values() 세 가지를 조합하면 그룹별 데이터 분포를 손쉽게 파악할 수 있습니다.