판다스 pivot table 값 추출, 정렬, to dataframe
이번 글에서는 지난 시간에 다루었던 피벗테이블 생성법에 이어서
생성된 테이블 내에서 필터링, 정렬 및 데이터프레임 변환을 진행하는 방법에 대해서
다루어보도록 하겠습니다.
pd.pivot_table 함수로 테이블을 생성하는 상세한 방법은 아래 링크의 이전 글을 참고하세요.
이해를 돕기 위해서 아래와 같은 피벗테이블이 table이라는 변수에 저장된 상황을 가정해보고
설명을 진행하도록 하겠습니다.
피벗테이블 필터링
만일 조회된 위의 테이블에서 값 1개만 가져오고 싶다면
인덱스 및 열이 MultiIndex 형태로 저장된 점에 유의하여
아래와 같이 loc 함수에서 튜플로 행, 열 이름을 지정한 필터링을 해야합니다.
table.loc[(2, '남'), ('mean', '국어', '문과')] # 92.5
가장 바깥쪽 index 및 column 이름을 기준으로 부분 테이블을 필터링하는 것도 가능합니다.
최외곽 index인 반 정보와 가장 위쪽 column인 mean/sum 중
2반과 mean 정보만을 골라 추출한 부분 테이블의 예시는 아래와 같습니다.
table.loc[2, 'mean']
추출된 부분 테이블 역시 피벗테이블이므로, 마찬가지 원리로
부분 테이블 내에서 다시 부분 테이블을 필터링하거나 부분 테이블 내 값 추출도
아래의 코드처럼 진행할 수 있습니다.
# 부분 테이블 내 부분 테이블 필터링
table.loc[2, 'mean'].loc['남', '국어'] # 성별, 전공 정보 모두 지정
'''
전공
문과 92.5
이과 NaN
Name: 남, dtype: float64'''
table.loc[2, 'mean'].loc[:, '국어'] # 전공 정보만 지정
'''
전공 문과 이과
성별
남 92.5 NaN
여 95.0 90.0'''
table.loc[2, 'mean'].loc['여'] # 성별 정보만 지정
'''
전공
국어 문과 95.0
이과 90.0
수학 문과 88.0
이과 100.0
Name: 여, dtype: float64'''
# 부분 테이블 내 값 추출
table.loc[2, 'mean'].loc['여', ('국어', '문과')] # 95.0
피벗테이블 정렬
피벗테이블 정렬도 데이터프레임과 마찬가지로 sort_values 함수로 가능합니다.
다만, 마찬가지로 열 이름이 MultiIndex 형태임에 유의하여 튜플로 열 이름 정보를
바깥쪽부터 순서대로 묶어서 원하는 열을 정확하게 지정해주어야 합니다.
아래는 mean, 수학, 문과 정보에 해당하는 열의 점수를 기준으로 오름차순 정렬의 예시입니다.
table.sort_values(('mean', '수학', '문과'))
같은 기준으로 내림차순 정렬도 진행해보겠습니다. ascending 인자를 False로 지정합니다.
table.sort_values(('mean', '수학', '문과'), ascending = False)
혹시, 더 자세한 sort_values 함수의 사용법이 필요하시다면 아래 글을 참고해보세요.
피벗테이블 데이터프레임 변환
조회된 피벗테이블을 일반적인 데이터프레임 형태로 바꾸기 위해서는
열과 행에 지정된 MultiIndex를 순서대로 풀어주어야 합니다.
먼저, 열에 지정된 멀티인덱스를 각각의 단일인덱스로 변경하는 예시는 아래와 같습니다.
table.columns = ['/'.join(col) for col in table.columns]
table
열 이름을 관리하는 columns 속성을 변경하는 원리이며,
/ 대신 다른 구분자를 넣으셔도 무방합니다.
이어서, reset_index 함수로 행의 멀티인덱스까지 풀어주시면 데이터프레임 변경이 완료됩니다.
table = table.reset_index()
table
'Python > Pandas' 카테고리의 다른 글
[Pandas] 파이썬 데이터프레임 특정 열 추출, 행 추출(1개, 여러 개) (0) | 2022.04.26 |
---|---|
[Pandas] 파이썬 피벗테이블 생성 : pd.pivot_table 함수 사용법 정리 (0) | 2022.04.21 |
[Pandas] 파이썬 데이터프레임 행 추가, 열 추가 방법 정리 (0) | 2022.04.12 |