Recent Posts
Recent Comments
Link
Today
Total
02-09 05:32
관리 메뉴

Hippo's data

데이터프레임 다루기2 - 데이터 프레임 변형 groupby, pivot, stack 본문

Python

데이터프레임 다루기2 - 데이터 프레임 변형 groupby, pivot, stack

Hippo's data 2023. 12. 11. 14:43
728x90

오늘은 저번 데이터프레임 조회 및 추출에 이어서 정형 데이터분석에서 주로 사용되는 데이터 프레임 변형의 3가지 방법에 대해 알아보겠습니다! 

 

데이터분석을 할 때 데이터의 행,열 구조를 변형해야 하는 경우가 많은데요 

이 경우 주로 활용되는 방법이 groupby(그룹화), pivot, stack 입니다

 

1. groupby(그룹화)

-> 같은 값을 하나로 묶어 통계 또는 집계 결과를 얻기위해 사용

-> groupby 결과는 딕셔너리 형태

 data_sex = data.groupby('sex')

 

data_sex.groups

-> groups이하여 그룹 속성 살펴볼 수 있음 

{'F': [0, 2, 3, 5, 7, 9, 12, 13, 14, ...], 'M': [4, 6, 8, 11, 15, 18, 22, 23, 27, 28, 57]}

 

groupby 내부 함수 (NaN은 제외하여 연산됨)
 - count : 데이터 개수
 - size : 집단별 크기
 - sum  : 데이터의 합
 - mean, std, var : 평균, 표준편차, 분산
 - min, max : 최소, 최대값

data_sex.mean( )  -> 그룹화된 data의 sex성별로 각 열의 평균 계산

 

- 특정 열만 볼 때

data_sex.mean( )[ ['열 이름','열 이름',...] ]     ==     data.groupby('sex').mean() [ ['열 이름','열 이름',...] ] / 대괄호 두개[[ ]] 

 

- 특정 행만 볼 떄

data.groupby ( ['sex', 'age', '그룹화할열', ...] ).mean()['열 이름'].loc[[("F","10대")]]  

-> 원하는 F여자, 10대 라는 특정 행만 확인할 수 있음

 

- index를 이용한 group by

set_index로 index셋팅(행 이름)

-> 기존 행 인덱스 제거후 특정 열을 인덱스로 설정

data.set_index(['age','sex'])

                      열1  열2  열3

age    sex

10대    M

            F

20대    M

            F

reset_index활용하여 기존 DataFrame형태로 변환   -> set_index전 원래 형태로 변경됨

data.set_index(['age','sex']).reset_index( )

 

data.set_index(['age','sex']) .groupby(level=[0]).mean()  -> 인덱스 세팅 후 level 0인 age 기준 그룹화

 

- aggregate(집계) 함수 사용

data.set_index(['age','sex']) .groupby(level=[0]).aggregate([np.mean, np.max])    -> np 넘파이 import 후 이용 

 

2. pivot / pivot_table

-> 데이터프레임 형태 변형함

-> 행 데이터를 열 데이터로 회전   /  pivot 사전의미 : 회전하다

 -> pivot형태 :  pd.pivot(index, columns, values)   -> 사용할 칼럼 명시하기

data.pivot(index = 'sex', columns ='age', values ='cost')   -> 행 sex / 열 age / 값 cost 

      age  10대  20대 

sex       

M        cost값   cost값

F          cost값   cost값

 

-> pivot_table형태 : pandas.pivot_table(index, columns, values, aggfuncaggfunc의 디폴트값은 mean

data.pivot_table(index = 'sex' , columns =' age ', values =' cost ' aggfunc = np.mean)

 

# pivot , pivot_table 둘다 복수 index행, 열 지정 가능 

# pivot에서 중복값은 에러메세지 반환 -> pivot_tableaggregation함수 이용하여 처리

 

3. stack, unstack

-> stack: 컬럼 -> 인덱스(행)로 dataframe 변경
-> 데이터를 row행으로 쌓기

-> unstack: 인덱스(행) -> 컬럼으로 dataframe 변경
-> stack의 반대

 

data.set_index(['age','sex']) -> age와 sex로 초기 인덱스 설정

                      열1  

age    sex

10대    M

            F

20대    M

            F

 

data.unstack(0) ->   0번째 인덱스인 age가 column열로 올라감 

                      열1  

            age    10대     20대   

sex

M

F

data.unstack(0).stack(1) -> 1번째 칼럼인 age가 다시 행 인덱스로 내려감 

                      열1 

sex age

M 10대

    20대

F  10대

    20대

728x90