Hippo's data
데이터프레임 다루기2 - 데이터 프레임 변형 groupby, pivot, stack 본문
오늘은 저번 데이터프레임 조회 및 추출에 이어서 정형 데이터분석에서 주로 사용되는 데이터 프레임 변형의 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, aggfunc) aggfunc의 디폴트값은 mean
data.pivot_table(index = 'sex' , columns =' age ', values =' cost ' aggfunc = np.mean)
# pivot , pivot_table 둘다 복수 index행, 열 지정 가능
# pivot에서 중복값은 에러메세지 반환 -> pivot_table의 aggregation함수 이용하여 처리
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대
'Python' 카테고리의 다른 글
함수(Function), 메소드(Method) 차이 (2) | 2024.01.30 |
---|---|
데이터프레임 다루기3 - 데이터프레임 병합 concat, merge, join (1) | 2023.12.17 |
데이터프레임 다루기1 - 데이터 프레임 조회 및 추출 (1) | 2023.12.10 |
데이터분석 관련 함수들-인덱싱,슬라이싱/리스트,튜플,딕셔너리 (2) | 2023.12.10 |
Pandas판다스 라이브러리-2 (1) | 2023.09.13 |