Python/Pandas

[Pandas] 파이썬 피벗테이블 필터링, 정렬 및 데이터프레임 변환

jimmy_AI 2022. 4. 21. 22:40
반응형

판다스 pivot table 값 추출, 정렬, to dataframe

이번 글에서는 지난 시간에 다루었던 피벗테이블 생성법에 이어서

생성된 테이블 내에서 필터링, 정렬 및 데이터프레임 변환을 진행하는 방법에 대해서

다루어보도록 하겠습니다.

 

pd.pivot_table 함수로 테이블을 생성하는 상세한 방법은 아래 링크의 이전 글을 참고하세요.

 

[Pandas] 파이썬 피벗테이블 생성 : pd.pivot_table 함수 사용법 정리

파이썬 판다스 피벗테이블 조회 예제 파이썬 pandas 모듈의 pd.pivot_table 함수로 피벗테이블을 원하는대로 생성하는 방법을 values, index, columns, fill_value 및 aggfunc 인자의 기능을 위주로 정리해보겠습.

jimmy-ai.tistory.com

 

이해를 돕기 위해서 아래와 같은 피벗테이블이 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 함수의 사용법이 필요하시다면 아래 글을 참고해보세요.

 

[Pandas] 데이터프레임 정렬하기 : sort_values, sort_index 함수

파이썬 판다스 정렬 함수 : sort_values() 안녕하세요. 이번 글에서는 판다스에서 데이터프레임을 정렬하는 함수인 sort_values 함수의 사용법에 대해서 간단히 다루어보겠습니다. 우선, 아래와 같은

jimmy-ai.tistory.com

 

 

피벗테이블 데이터프레임 변환

조회된 피벗테이블을 일반적인 데이터프레임 형태로 바꾸기 위해서는

열과 행에 지정된 MultiIndex를 순서대로 풀어주어야 합니다.

 

먼저, 열에 지정된 멀티인덱스를 각각의 단일인덱스로 변경하는 예시는 아래와 같습니다.

table.columns = ['/'.join(col) for col in table.columns]

table

열 이름을 관리하는 columns 속성을 변경하는 원리이며,

/ 대신 다른 구분자를 넣으셔도 무방합니다.

 

이어서, reset_index 함수로 행의 멀티인덱스까지 풀어주시면 데이터프레임 변경이 완료됩니다.

table = table.reset_index()

table