프로그래밍 언어/Python

Python_pivot_table

OHSAYU 2022. 10. 2. 16:59

피봇 테이블 함수 : pivot_table()

    피봇 테이블(pivot table)이란 데이터 열 중에서 두 개의 열을 각각 행 인덱스, 열 인덱스로 사용하여 데이터를 조회하여 펼쳐놓은 것을 말한다.

    Pandas는 피봇 테이블을 만들기 위한 pivot 메서드를 제공한다. 첫 번째 인수로는 행 인덱스로 사용할 열 이름, 두 번째 인수로는 열 인덱스로 사용할 열 이름, 그리고 마지막으로는 데이터로 사용할 열 이름을 넣는다. Pandas는 지정된 두 열을 각각 행 인덱스와 열 인덱스로 바꾼 후 행 인덱스의 라벨 값이 첫 번째 키의 값과 같고 열 인덱스의 라벨 값이 두 번째 키의 값과 같은 데이터를 찾아서 해당 칸에 넣는다. 만약 주어진 데이터가 존재하지 않으면 해당 칸에 NaN값을 넣는다.

 

pivot_table() 함수의 기본 구성요소

  • 행 인덱스 : index
  • 열 인덱스 : columns
  • 데이터 값 : values
  • 데이터 집계함수 : aggfunc

각 구성요소에 적용할 데이터프레임의 열을 각각 함수의 인자로 전달한다. 4가지 구성요소를 적절히 입력하고 피벗테이블을 생성해보자. pivot_table은 세로 데이터를 가로 데이터로 변경해주는 역할을 한다. 먼저 테스트용 DataFrame을 생성하자.

테스트용 DataFrame

import pandas as pd

dt = pd.DataFrame({
    'date': [20201201, 20201201, 20201201, 20201201, 20201202, 20201202, 20201202, 20201202, 20201203, 20201203, 20201203, 20201203],
    'item_id': [1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2],
    'item_name': ['a', 'a', 'b', 'b', 'a', 'a', 'b', 'b', 'a', 'a', 'b', 'b'],
    'price': [1000, 1100, 10000, 10010, 1100, 1070, 10500, 10700, 1050, 950, 10300, 1150]
})

dt

 

    이 데이터는 각 item들의 일자별 가격정보를 담고 있다. a와 b 두 종류의 아이템이 있으며 총 3일간의 가격 변화 데이터이다. 또한 위 데이터는 날짜 컬럼인 data 컬럼이 존재하며 이 날짜는 위에서 아래로 내려가며 점점 증가한다.

    근데 만약 각각의 날짜를 컬럼으로 하여 각 아이템들의 날짜별 평균 가격을 알고 싶으면 어떻게 해야 할까? 다음처럼 pivot_table method를 이용하면 날짜가 컬럼이 되며 가로 데이터로 바뀌었다.

각 아이템들의 날짜별 평균 가격

pdf = pd.pivot_table(df,                                 # 피벗할 데이터프레임
                      index = ['item_id', 'item_name'],  # 행 위치에 들어갈 열
                      columns = 'date',                  # 열 위치에 들어갈 열
                      values = 'price',                  # 데이터로 사용할 열
                      aggfunc = 'mean',                  # 데이터 집계함수
                      dropna = False)                    # 결측치 출력여부
pdf

 

하나의 예시를 더 들어보자. 새로운 데이터프레임을 생성하자.

테스트용 DataFrame2

df2 = pd.DataFrame({
    '반' : [1, 1, 1, 1, 2, 2, 2, 2],
    '성별' : ['남', '남', '여', '여', '남', '남', '여', '여'],
    '전공' : ['이과', '이과', '이과', '문과', '문과', '문과', '문과', '이과'],
    '국어' : [90, 80, 85, 95, 100, 85, 95, 90],
    '수학' : [88, 96, 92, 84, 80, 92, 88, 100]})

df2

 

1. 반과 전공을 기준으로 그룹을 나누어 각 그룹의 국어 성적 평균을 조회한 예시

pdf2_1 = pd.pivot_table(df2, 
                        values='국어', 
                        index='반',
                        columns='전공',
                        aggfunc=np.mean)

pdf2_1

 

2. 위의 테이블에서 수학 성적의 평균도 추가로 같이 조회한 예시

pdf2_2 = pd.pivot_table(df2, 
                        values=['국어', '수학'],
                        index='반',
                        columns='전공',
                        aggfunc=np.mean)

pdf2_2

 

3. 위의 테이블에서 인덱스에 성별 정보도 추가하여 조회한 예시

pdf2_3 = pd.pivot_table(df2, 
                        values=['국어', '수학'],
                        index=['반', '성별'],
                        columns='전공',
                        aggfunc=np.mean)

pdf2_3

 

4. 위의 테이블에서 성별 정보를 인덱스가 아닌 컬럼에 추가하여 조회한 예시

pdf2_4 = pd.pivot_table(df2, 
                        values=['국어', '수학'],
                        index='반',
                        columns=['전공', '성별'],
                        aggfunc=np.mean)

pdf2_4

 

5. 위의 테이블에서 평균에 표준편차 정보도 얻기 위해 aggfunc 인자에 원하는 연산을 추가하여 조회한 예시

pdf2_5 = pd.pivot_table(df2, 
                        values=['국어', '수학'],
                        index='반',
                        columns=['전공', '성별'],
                        aggfunc=[np.mean, np.std])

pdf2_5

 

 

출처 : https://cosmosproject.tistory.com/29

 

Python Pandas : pandas.pivot_table (pivot, 세로 데이터를 가로 데이터로 변경)

pandas.pivot_table pivot_table은 세로 데이터를 가로 데이터로 변경해주는 역할을 합니다. 먼저 테스트용 DataFrame을 생성합시다. import pandas as pd dict_1 = { 'dt': [20201201, 20201201, 20201201, 20201..

cosmosproject.tistory.com

출처 : https://datascienceschool.net/01%20python/04.07%20%ED%94%BC%EB%B4%87%ED%85%8C%EC%9D%B4%EB%B8%94%EA%B3%BC%20%EA%B7%B8%EB%A3%B9%EB%B6%84%EC%84%9D.html

 

4.7 피봇테이블과 그룹분석 — 데이터 사이언스 스쿨

.ipynb .pdf to have style consistency -->

datascienceschool.net

출처 : https://jimmy-ai.tistory.com/220

 

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

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

jimmy-ai.tistory.com