판다스 (Pandas) (Pivot Table)

2024. 8. 3. 17:32프로그래밍 (확장)/Python-Pandas

pivot을 생성할 때 index, columns, values에 지정된 값이 유일하지 않으면 ValueError가 발생하는데  pivot_table 함수는 피벗 테이블을 만들 때 중복 값을 처리할 수 있다

 

기본 사용법

DataFrame.pivot_table(values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True)

 

  • values: 피벗 테이블에 포함될 데이터 열
  • index: 행 레이블로 사용할 열
  • columns: 열 레이블로 사용할 열
  • aggfunc: 집계 함수 (기본값은 'mean')
  • fill_value: 결측치를 대체할 값
  • margins: 총계를 추가할지 여부
  • margins_name: 총계 열/행의 이름 (기본값은 'All')

추가 설명

  • pivot_table은 aggfunc 매개변수를 사용하여 집계 함수를 지정할 수 있다. (기본값은 mean)
  • 여러 값을 피벗할 때 values 매개변수에 열 이름의 리스트를 전달할 수 있다.
  • 결측치를 특정 값으로 채우려면 fill_value 매개변수를 사용.
  • 총계 행/열을 추가하려면 margins 매개변수를 True로 설정하고, 총계의 이름을 지정하려면 margins_name 매개변수를 사용한다.

 

 

예시는 ChatGPT로 생성

 

예시 1:

데이터 프레임 생성

import pandas as pd

# 중복 데이터를 포함한 DataFrame 생성
data = {
    'Date': ['2020-01-01', '2020-01-01', '2020-01-01', '2020-01-02', '2020-01-02'],
    'City': ['New York', 'New York', 'Los Angeles', 'New York', 'Los Angeles'],
    'Temperature': [30, 32, 25, 35, 28],
    'Humidity': [80, 85, 70, 75, 65]
}

df = pd.DataFrame(data)
print(df)
         Date         City  Temperature  Humidity
0  2020-01-01     New York           30        80
1  2020-01-01     New York           32        85
2  2020-01-01  Los Angeles           25        70
3  2020-01-02     New York           35        75
4  2020-01-02  Los Angeles           28        65

 

pivot_table 함수로 생성

# 중복 값을 평균으로 집계하여 피벗 테이블 생성
pivot_table = df.pivot_table(values='Temperature', index='Date', columns='City', aggfunc='mean')
print(pivot_table)
City        Los Angeles  New York
Date                             
2020-01-01         25.0      31.0
2020-01-02         28.0      35.0

위에서 같은 Date에 같은 City인 값을은 mean(평균)값으로 계산되어 value가 채워져 있는 것을 확인 할 수 있다.

 

예시 2:

기본 피벗 테이블

 

import pandas as pd

# 데이터 생성
data = {
    'Date': ['2020-01-01', '2020-01-01', '2020-01-02', '2020-01-02'],
    'City': ['New York', 'Los Angeles', 'New York', 'Los Angeles'],
    'Temperature': [30, 25, 35, 28],
    'Humidity': [80, 70, 75, 65]
}

df = pd.DataFrame(data)
print(df)
         Date         City  Temperature  Humidity
0  2020-01-01     New York           30        80
1  2020-01-01  Los Angeles           25        70
2  2020-01-02     New York           35        75
3  2020-01-02  Los Angeles           28        65

 

피벗 테이블 생성

pivot_table = df.pivot_table(values='Temperature', index='Date', columns='City')
print(pivot_table)
City        Los Angeles  New York
Date                             
2020-01-01         25.0      30.0
2020-01-02         28.0      35.0

 

 

예시 3:

여러 값 피벗 테이블

pivot_table = df.pivot_table(values=['Temperature', 'Humidity'], index='Date', columns='City')
print(pivot_table)
              Humidity          Temperature         
City       Los Angeles New York Los Angeles New York
Date                                                
2020-01-01        70.0     80.0        25.0     30.0
2020-01-02        65.0     75.0        28.0     35.0

 

예시 4:

집계 함수 설정

pivot_table = df.pivot_table(values='Temperature', index='Date', columns='City', aggfunc=['mean', 'max', 'min'])
print(pivot_table)
                  mean                  max                  min         
City       Los Angeles New York Los Angeles New York Los Angeles New York
Date                                                                     
2020-01-01        25.0     30.0          25       30          25       30
2020-01-02        28.0     35.0          28       35          28       35

 

예시 5:

걸측치 처리

pivot_table = df.pivot_table(values='Temperature', index='Date', columns='City', fill_value=0)
print(pivot_table)
City        Los Angeles  New York
Date                             
2020-01-01         25.0      30.0
2020-01-02         28.0      35.0

 

예시 6:

총계 행/열 추가

pivot_table = df.pivot_table(values='Temperature', index='Date', columns='City', margins=True, margins_name='Total')
print(pivot_table)
City        Los Angeles  New York  Total
Date                                    
2020-01-01         25.0      30.0   27.5
2020-01-02         28.0      35.0   31.5
Total              26.5      32.5   29.5

 

예시 7:

여러 인덱스와 컬럼을 사용한 피벗 테이블

data = {
    'Date': ['2020-01-01', '2020-01-01', '2020-01-02', '2020-01-02'],
    'City': ['New York', 'Los Angeles', 'New York', 'Los Angeles'],
    'Weather': ['Sunny', 'Sunny', 'Rainy', 'Cloudy'],
    'Temperature': [30, 25, 35, 28]
}

df = pd.DataFrame(data)
print(df)
         Date         City Weather  Temperature
0  2020-01-01     New York   Sunny           30
1  2020-01-01  Los Angeles   Sunny           25
2  2020-01-02     New York   Rainy           35
3  2020-01-02  Los Angeles  Cloudy           28
pivot_table = df.pivot_table(values='Temperature', index=['Date', 'Weather'], columns='City')
print(pivot_table)
City                Los Angeles  New York
Date       Weather                       
2020-01-01 Sunny           25.0      30.0
2020-01-02 Cloudy          28.0       NaN
           Rainy            NaN      35.0

 

 

참고: https://pandas.pydata.org/docs/

 

pandas documentation — pandas 2.2.2 documentation

API reference The reference guide contains a detailed description of the pandas API. The reference describes how the methods work and which parameters can be used. It assumes that you have an understanding of the key concepts.

pandas.pydata.org

 

'프로그래밍 (확장) > Python-Pandas' 카테고리의 다른 글

Pandas - 2. 데이터 구조  (0) 2025.01.24
Pandas - 1. 소개와 설치  (0) 2025.01.24
판다스 (Pandas) (GroupBy)  (0) 2024.08.03
판다스 (Pandas) (Pivot)  (0) 2024.08.03
판다스 (Pandas) (데이터 정제)  (0) 2024.08.03