포스트

Pivot_Tables

Pivot_Tables

Pivot_Tables

입력값으로 간단한 열 단위의 데이터를 취하고 그 데이터에 대한 다차원 요약을 제공하는 2차원 테이블로 항목을 그룹핑
GroupBy 집계의 다차원 버전
분할-적용-결합 작업을 하면 분할과 결합 작업이 1차원 인덱스에서 발생하는 것이 아닌 2차원 그리드에서 발생

1
2
3
4
5
import numpy as np
import pandas as pd
import seaborn as sns

titanic = sns.load_dataset('titanic')
1
titanic.head()
survivedpclasssexagesibspparchfareembarkedclasswhoadult_maledeckembark_townalivealone
003male22.0107.2500SThirdmanTrueNaNSouthamptonnoFalse
111female38.01071.2833CFirstwomanFalseCCherbourgyesFalse
213female26.0007.9250SThirdwomanFalseNaNSouthamptonyesTrue
311female35.01053.1000SFirstwomanFalseCSouthamptonyesFalse
403male35.0008.0500SThirdmanTrueNaNSouthamptonnoTrue

GroupBy Syntax

1
titanic.groupby('sex')[['survived']].mean()
survived
sex
female0.742038
male0.188908
1
titanic.groupby(['sex', 'class'], observed=True)['survived'].aggregate('mean').unstack()
classFirstSecondThird
sex
female0.9680850.9210530.500000
male0.3688520.1574070.135447

피벗 테이블 구문 Pivot Table Syntax

1
2
# GroupBy 구문에 비해 가독성 향상
titanic.pivot_table('survived', index='sex', columns='class', observed=True)
classFirstSecondThird
sex
female0.9680850.9210530.500000
male0.3688520.1574070.135447

Multi-level pivot tables

1
2
3
# 세 번째 차원 추가
age = pd.cut(titanic['age'], [0, 18, 80])
titanic.pivot_table('survived', ['sex', age], 'class', observed=True)
classFirstSecondThird
sexage
female(0, 18]0.9090911.0000000.511628
(18, 80]0.9729730.9000000.423729
male(0, 18]0.8000000.6000000.215686
(18, 80]0.3750000.0714290.133663
1
2
3
# 열 기준 동작 추가
fare = pd.qcut(titanic['fare'], 2)
titanic.pivot_table('survived', ['sex', age], [fare, 'class'], observed=True)
fare(-0.001, 14.454](14.454, 512.329]
classFirstSecondThirdFirstSecondThird
sexage
female(0, 18]NaN1.0000000.7142860.9090911.0000000.318182
(18, 80]NaN0.8800000.4444440.9729730.9142860.391304
male(0, 18]NaN0.0000000.2608700.8000000.8181820.178571
(18, 80]0.00.0980390.1250000.3913040.0303030.192308

Additional pivot table options

1
이 기사는 저작권자의 CC BY-NC 4.0 라이센스를 따릅니다.