보충 | pivot과 pivot_table, groupby의 차이

소리·2023년 11월 20일
0

Pivot (피벗 전환)

  • 정의 : 테이블 재배치(구조 변경)
    여러 컬럼을 index, values, columns로 사용할 수 있다.
    set_index로 계층적 색인 생성 후, unstack 매서드로 형태를 변환하는 과정의 축약형
  • 문법 : DataFrame.pivot(index=None, columns=None, values=None)

index : 인덱스로 사용될 열입니다.
columns : 열로 사용될 열 입니다.
values : 값으로 입력될 열 입니다.
indexcolumns에 리스트를 입력 할 경우 멀티 인덱스로 피벗테이블이 생성됩니다.
values에 리스트를 입력 할 경우 각 값에 대한 테이블이 연속적으로 생성됩니다.

예)
도시 이름이 열 인덱스가 되고 연도가 행 인덱스가 되어 행과 열 인덱스만 보면 어떤 도시의 어떤 시점의 인구를 쉽게 알 수 있도록 피봇테이블로 만들어보자. pivot 명령으로 사용하고 행 인덱스 인수로는 "도시", 열 인덱스 인수로는 "연도", 데이터 이름으로 "인구"를 입력하면 된다.

df.pivot("도시", "연도", "인구")

set_index와 unstack 명령으로 피봇테이블과 동일하게 만들 수 있다.

df1.set_index(["도시", "연도"])[["인구"]].unstack()

다른 예) 출처
각 날짜별 판매량의 합계 구하기

# pivot method 사용
sales.pivot('date','code').sum(1)

# set_index 메서드 사용
data = sales.set_index(['date','code'])
data.sum(level=0) 

각 code별 판매량 합계 구하기

# pivot method 사용
sales.pivot('date','code').sum(0)

# set_index 메서드 사용
data = sales.set_index(['date','code'])
data.sum(level=1) 

Pivot_table (피벗생성 / 스프레드 기반)

  • 정의 : 데이터를 스프레드시트 기반 피벗 테이블로 변환하는 메서드 (엑셀 스프레드시트 피벗 테이블과 유사)
  • 문법 : DataFrame.pivot_table(values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True)

values : 값으로 입력될 열 입니다.
index : 인덱스로 사용될 열입니다.
columns : 열로 사용될 열 입니다.
aggfunc : 결과로 출력될 함수 입니다.
fill_value : 결측치를 채워넣을 값입니다.
margins : 합계를 표시할지 여부입니다. True일 경우 새 열을 생성하여 합계를 출력합니다.
dropna : 항목이 모두 결측치인 열을 포함할지 여부입니다. 기본값은 True로 포함하지 않습니다.
margins_name : margins가 True일 경우 해당 열의 이름입니다.
observed : 범주형 그룹에 대해 관찰된 값만 표시할지 여부 입니다.
sort : 각 범주들을 사전적으로 정리할지 여부입니다. 기본값은 True로 정렬이 수행됩니다.

groupby (그룹 별로 분류)

  • 데이터를 피봇팅하여 통계량을 볼 수 있도록 도와주는 메서드, 특정 조건에 맞게 전처리할 때 용이 (피봇 테이블은 행과 열 기준으로 통계량을 보고 싶을 때)

    	pivot_table 명령은 groupby 명령처럼 그룹분석을 하지만 최종적으로는 pivot 명령처럼 피봇테이블을 만든다. 
    	즉 groupby 명령의 결과에 unstack을 자동 적용하여 2차원적인 형태로 변형
  • 문법 : DataFrame.groupby(by=None, axis=_NoDefault.no_default, level=None, as_index=True, sort=True, group_keys=True, observed=_NoDefault.no_default, dropna=True)

by : 그룹화할 내용입니다. 함수, 축, 리스트 등등이 올 수 있습니다.
axis : 그룹화를 적용할 축입니다.
level : 멀티 인덱스의 경우 레벨을 지정할 수 있습니다.
as_index : 그룹화할 내용을 인덱스로 할지 여부입니다. False이면 기존 인덱스가 유지됩니다.
sort : 그룹키를 정렬할지 여부입니다.
group_keys : apply메서드 사용시 결과에따라 그룹화 대상인 열이 인덱스와 중복(group key)이 될 수 있습니다. 이 때, group_keys=False로 인덱스를 기본값으로 지정할 수 있습니다.
squeeze : 결과가 1행 or 1열짜리 데이터일 경우 Series로, 1행&1열 짜리 데이터일 경우 스칼라로 출력합니다.
observed : Categorical로 그룹화 할 경우 Categorical 그룹퍼에 의해 관찰된 값만 표시할 지 여부입니다.
dropna : 결측값을 계산에서 제외할지 여부입니다.

profile
데이터로 경로를 탐색합니다.

0개의 댓글