- [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'를 기준으로 그룹화하여 계산할 수 있습니다.
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
'Data Analystics > pandas' 카테고리의 다른 글
[Pandas] '.copy()' vs '=': 깊은 복사(Deep Copy) vs 얕은 복사(Shallow copy) (0) 2024.01.15 [Pandas] merge() 메소드를 사용하여 데이터 병합하기 (4) 2024.01.08 [Pandas] join() 메소드를 사용하여 데이터 통합하기 (0) 2024.01.08 [Pandas] concat() 메소드를 사용하여 데이터 통합하기 (2) 2024.01.08 [Pandas] manipulate textual data(문자형 데이터 다루기) (2) 2024.01.06 다음글이 없습니다.이전글이 없습니다.댓글