BASHA TECH

pivot, groupby 본문

Computer/Pandas

pivot, groupby

Basha 2022. 10. 5. 18:23
728x90

피봇테이블(pivot table)이란 데이터 열 중에서 두 개의 열을 각각 행 인덱스, 열 인덱스로 사용하여 데이터를 조회하여 펼쳐놓은 것을 말한다.

판다스는 피봇테이블을 만들기 위한 pivot 메서드를 제공한다. 첫번째 인수로는 행 인덱스로 사용할 열 이름, 두번째 인수로는 열 인덱스로 사용할 열 이름, 그리고 마지막으로 데이터로 사용할 열 이름을 넣는다.

판다스는 지정된 두 열을 각각 행 인덱스와 열 인덱스로 바꾼 후 행 인덱스의 라벨 값이 첫번째 키의 값과 같고 열 인덱스의 라벨 값이 두번째 키의 값과 같은 데이터를 찾아서 해당 칸에 넣는다. 만약 주어진 데이터가 존재하지 않으면 해당 칸에 NaN 값을 넣는다.

pivot_table

pivot_table

Pandas는 pivot 명령과 groupby 명령의 중간 성격을 가지는 pivot_table 명령도 제공한다.

pivot_table 명령은 groupby 명령처럼 그룹분석을 하지만 최종적으로는 pivot 명령처럼 피봇테이블을 만든다. 즉 groupby 명령의 결과에 unstack을 자동 적용하여 2차원적인 형태로 변형한다. 사용 방법은 다음과 같다.

  • pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, margins_name='All')
    • data: 분석할 데이터프레임 (메서드일 때는 필요하지 않음)
    • values: 분석할 데이터프레임에서 분석할 열
    • index: 행 인덱스로 들어갈 키 열 또는 키 열의 리스트
    • columns: 열 인덱스로 들어갈 키 열 또는 키 열의 리스트
    • aggfunc: 분석 메서드
    • fill_value: NaN 대체 값
    • margins: 모든 데이터를 분석한 결과를 오른쪽과 아래에 붙일지 여부
    • margins_name: 마진 열(행)의 이름

만약 조건에 따른 데이터가 유일하게 선택되지 않으면 그룹연산을 하며 이 때 aggfunc 인수로 정의된 함수를 수행하여 대표값을 계산한다.

pivot_table를 메서드로 사용할 때는 객체 자체가 데이터가 되므로 data 인수가 필요하지 않다.

예를 들어 위에서 만들었던 피봇테이블은 pivot_table 명령으로 다음과 같이 만들 수도 있다. 인수의 순서에 주의하라.

 

그룹 분석

만약 키가 지정하는 조건에 맞는 데이터가 하나 이상이라서 데이터 그룹을 이루는 경우에는 그룹의 특성을 보여주는 그룹분석(group analysis)을 해야 한다.

그룹분석은 피봇테이블과 달리 키에 의해서 결정되는 데이터가 여러개가 있을 경우 미리 지정한 연산을 통해 그 그룹 데이터의 대표값을 계산한다. 판다스에서는 groupby 메서드를 사용하여 다음처럼 그룹분석을 한다.

  1. 분석하고자 하는 시리즈나 데이터프레임에 groupby 메서드를 호출하여 그룹화를 한다.
  2. 그룹 객체에 대해 그룹연산을 수행한다.

groupby

groupby 메서드

groupby 메서드는 데이터를 그룹 별로 분류하는 역할을 한다. groupby 메서드의 인수로는 다음과 같은 값을 사용한다.

  • 열 또는 열의 리스트
  • 행 인덱스

연산 결과로 그룹 데이터를 나타내는 GroupBy 클래스 객체를 반환한다. 이 객체에는 그룹별로 연산을 할 수 있는 그룹연산 메서드가 있다.

그룹연산 메서드

groupby 결과, 즉 GroupBy 클래스 객체의 뒤에 붙일 수 있는 그룹연산 메서드는 다양하다. 다음은 자주 사용되는 그룹연산 메서드들이다.

  • size, count: 그룹 데이터의 갯수
  • mean, median, min, max: 그룹 데이터의 평균, 중앙값, 최소, 최대
  • sum, prod, std, var, quantile : 그룹 데이터의 합계, 곱, 표준편차, 분산, 사분위수
  • first, last: 그룹 데이터 중 가장 첫번째 데이터와 가장 나중 데이터

이 외에도 많이 사용되는 것으로는 다음과 같은 그룹연산이 있다.

  • agg, aggregate
    • 만약 원하는 그룹연산이 없는 경우 함수를 만들고 이 함수를 agg에 전달한다.
    • 또는 여러가지 그룹연산을 동시에 하고 싶은 경우 함수 이름 문자열의 리스트를 전달한다.
  • describe
    • 하나의 그룹 대표값이 아니라 여러개의 값을 데이터프레임으로 구한다.
  • apply
    • describe 처럼 하나의 대표값이 아닌 데이터프레임을 출력하지만 원하는 그룹연산이 없는 경우에 사용한다.
  • transform
    • 그룹에 대한 대표값을 만드는 것이 아니라 그룹별 계산을 통해 데이터 자체를 변형한다.

groupby() 함수를 이용해 데이터프레임을 범주별로 묶어 통계내고 범주별로 출력하는 방법을 소개하겠습니다.

엑셀에서 흔히 쓰는 필터링 역할을 groupby()를 통해 할 수 있는데 한 눈에 볼 수 없다는 단점은 있지만

groupby로 손쉽게 묶어낼 수 있고 빠르게 데이터 처리를 할 수 있기 때문에 유용하게 사용됩니다.

 

 

728x90
반응형
Comments