묭동이 개발 블로그
  • [Pandas] groupby() 메소드를 사용하여 데이터 그룹화하기
    2024년 01월 09일 13시 54분 08초에 업로드 된 글입니다.
    작성자: 묭동이

    안녕하세요 이번 글에서는 pandas library의 groupby() 메소드를 사용해 데이터들을 그룹화하는 방법을 알아보겠습니다.

     

    groupby?

    • SQL의 GROUP BY와 동일한 로직
    • Groupby 기준칼럼 : 패턴이 있는 문자열 => 그룹화
    • Groupby 대상칼럼 : 수치 데이터 - 필요한 함수 : 집계함수 (합, 평균, 표준편차, 최대, 최소 등)
      • groupby 메소드는 주로 집계함수(aggregate Function)와 함께 사용합니다
    • 사용법 : df.groupby('기준칼럼')['대상칼럼'].agg(['집계함수'])

    groupby 메소드를 사용하는 이유?

    • 데이터셋을 특정 기준에 따라 그룹화하여, 각 그룹에 대해 통계를 계산하고 싶을 때 사용합니다. 
    • 예를 들어, 여러 장르의 책들이 있을 때 각 장르별로 책이 몇 권 있는지 알고 싶다면, 'genre'를 기준으로 그룹화하여 계산할 수 있습니다.
      • 이 예시는 아래에서 이미지와 함께 한번 더 설명하도록 하겠습니다 !

     

    필요한 라이브러리와 클래스를 불러오도록 하겠습니다.

     

    StringIO 클래스를 불러온 이유는 데이터가 "문자열"로 되어있기 때문입니다.

    StringIO 클래스는 표준 라이브러리 'io'에 있는 클래스로 문자열 형태의 데이터를 파일형태로 변환해줍니다.

    CSV(Comma-Separated Values)파일로 변환하기 위해 데이터를 필드별로 ,(콤마)를 통해 구분해주었습니다.

     

    이후 StringIO 클래스를 사용하여 book_data 문자열을 pandas 라이브러리의 'read_csv' 메소드가 읽을 수 있는 파일형태로 변환한 후

    'read_csv' 메소드를 사용하여 파일을 읽어옵니다.

    출력결과 데이터가 잘 불러와진 것을 확인할 수 있습니다.

     

    위 데이터셋을 genre필드를 기준으로 구분하면 아래와 같이 3개의 그룹이 있다는 것을 확인할 수 있습니다.

    여러 장르의 책들이 있을 때 각 장르별로 책이 몇 권 있는지 알고 싶다면, 'genre'를 기준으로 그룹화하여 계산할 수 있습니다.

    genre 별로 그룹화된 이미지

    df.groupby('genre')['qty'].agg(['sum'])

    • 아래 코드는 pandas DataFrame df에서 'genre' 열을 기준으로 그룹화(groupby)한 후, 각 장르(genre)별로 'qty' 열의 합계(sum)를 계산합니다.
    • 이 때 agg(['sum']) 메소드는 집계 함수(aggregation function)로 'sum'을 사용한다는 의미를 나타냅니다.
    • 출력 결과가 DataFrame 형태지만, 인덱스가 

     

    reset_index()를 호출하여 결과 DataFrame의 인덱스를 재설정합니다. 이렇게 함으로써 장르(genre)가 인덱스에서 일반 열로 변경되어 결과가 더 명확하게 표시됩니다.

     

    장르별 총합을 의미하는 열 이름을 지정해주는 것이 좀 더 명확할 것 같은데요, 이때는 rename() 메소드를 사용하시면 열 이름을 변경할 수 있습니다.

    rename(columns={'sum' : 'total'}) 메소드를 통해 위에서 출력되는 sum 열이 total 열로 변경된 것을 확인할 수 있습니다.

     

     

    틀린 부분 댓글로 작성해주시면 감사하겠습니다 😊

     

    Refererence

     

    GROUP BY in SQL Explained

    Revisit SQL GROUP BY logic with straightforward explanations. GROUP BY explained with examples for immediate application.

    learnsql.com

    댓글