티스토리 뷰

반응형

# 피벗 (.pivot)  * 중요

- 데이터 테이블 재배치(구조 변경)

 - 여러 column을 index, values, columns 값으로 사용 가능

 - Group 연산, 테이블 요약, 그래프 등을 위해 사용

 - set_index로 계층적 색인 생성 후, unstack 메서드로 형태를 변경하는 과정의 축약형 


p1.pivot?

p1.pivot(index=None, columns=None, values=None)

# index : index 색인으로 사용될 컬럼

# columns : column 색인으로 사용될 컬럼

# values : value에 채우고자 하는 컬럼


p1 = pd.read_csv('melt_ex.csv')


p1.pivot('year','mon')    멀티인덱스로 생성

p1.set_index(['year','mon']).unstack('mon')   # set_index로도 pivot 효과 가능


p1.pivot('year','mon','latte')

p1.pivot('year','mon')['latte']


p1.pivot('year','mon').xs(1,level=1,axis=1)   # 1월 데이터




# 피벗 테이블 (.pivot_table)

  - 테이블의 요약된 정보 출력


data.pivot_table?

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

index : index 색인으로 사용될 컬럼

columns : column 색인으로 사용될 컬럼

# aggfunc : 데이터 축약 시 사용할 함수 (mean, sum, count ...)

margins : 행/열별 총 합


data = pd.read_csv('pivot_ex.csv')


data.pivot_table(index ='code', columns='product')   # aggfunc의 default는 mean


data.pivot_table(index ='code',columns='product', aggfunc=sum)


data.pivot_table(index ='code',columns='product', aggfunc=sum, margins=True)  ,열별 총합


 



#. Q1

# 1. sales 데이터를 불러와서

sales = pd.read_csv('sales.csv')

sales


sales.pivot('date','code')


# 1) 각 날짜별 판매량의 합계를 구하여라.

sales.pivot('date','code').sum(1)    # pivot 메서드 사용

date

2018-01-01    162

2018-01-02    125

2018-01-03    231

2018-01-04    168

2018-01-05    207

2018-01-06    167

2018-01-07     26

dtype: int64

data = sales.set_index(['date','code'])    # set_index 메서드 사용

data.sum(level=0) 


# 2)  code별 판매량의 합계를 구하여라.

sales.pivot('date','code').sum(0)

      code

qty  c1      300

      c2      315

      c3      186

      c4      285

dtype: int64

data = sales.set_index(['date','code']) 

data.sum(level=1)


# 3) product 데이터를 이용하여 각 날짜별상품별 매출의 합계를 구하여라

prod = pd.read_csv('product.csv')


data3 = pd.merge(sales, prod, on='code')

data3['sales'] = data3['qty']*data3['price']


data3.pivot('date','code','sales').sum(0)   # 상품(코드)별 매출 합계

code

c1    74700

c2    46935

c3    55800

c4    34200

dtype: int64


data3.pivot('date','code','sales').sum(1)   # 날짜별 매출 합계

date

2018-01-01    29726

2018-01-02    23683

2018-01-03    40339

2018-01-04    40341

2018-01-05    39250

2018-01-06    33608

2018-01-07     4688

dtype: int64


 


#. Q2

# 1. sales2 데이터를 불러와서

sales = pd.read_csv('sales2.csv', encoding='cp949')


# 1) 데이터 형식 변환

data = sales.pivot_table(index=['날짜','지점'], columns='품목', values=['출고','판매'])


# 2) 위의 데이터에서 2018-01-03일 데이터만 출력

data.xs('2018-01-03')   # level=0, axis=0


# 3) 위의 데이터에서 c2지점에 대한 데이터만 출력

data.xs('2018-01-03').loc['c2']

    품목 

출고  TV     1064

    냉장고    1400

    세탁기    1232

    에어컨    1197

판매  TV      346

    냉장고     457

    세탁기     144

    에어컨     635

Name: c2, dtype: int64


# 3-1) 전체 데이터에서 c2지점에 대한 데이터만 출력

data.xs('c2',level=1)


# 4) 위의 데이터에서 2018-01-02일에 c2지점의 세탁기의 판매량 출력

data.loc[('2018-01-02','c2'), ('판매','세탁기')]

745


# 5) 각 지점별 판매량의 평균값 출력

data['판매'].mean(axis=0, level=1).mean(axis=1)

지점

c1    561.416667

c2    561.666667

c3    526.583333

dtype: float64


 


#. Q3

# subway.csv 파일을 이용하여 다음을 수행

subway = pd.read_csv('subway.csv', encoding = 'cp949')


1) 각 노선번호 별 승차와 하차의 합 구하기

subway.pivot_table(index = '노선번호', values = ['승차','하차']).sum(axis=1)

노선번호

line_1     954889.00

line_2    4768852.30

line_3    1651980.30

line_4    1993235.50

line_5    1059013.15

line_6    1993235.50

line_7    2010750.65

line_8    1838368.75

dtype: float64


2) 지하철 운영 회사별 승하차에 대한 평균값 구하기

** 서울메트로(2,4호선), 코레일(1,3호선), 도시철도공사(5,6,7,8)

subway.loc[:,'line_no'] = subway.loc[:,'노선번호'].map(lambda x : int(x.split('_')[1]))   # 노선번호 추출 후 새로운 컬럼에 저장


line_owner = {1: '코레일' , 2 : '서울메트로' , 3 : '코레일' , 4 : '서울메트로' ,     # dictionary 구조에 그룹별 치환 값 저장

                    5: '도시철도공사', 6 : '도시철도공사' , 7 : '도시철도공사' , 8 : '도시철도공사' } ; 

subway['관리사'] = subway['line_no'].map(line_owner)


# 운영 회사별 승하차 평균

subway.pivot_table(index = '관리사', values = ['승차','하차']).mean(axis=1)

관리사

도시철도공사    8.626710e+05

서울메트로     1.690522e+06

코레일       6.517173e+05

dtype: float64




고: KIC 캠퍼스 머신러닝기반의 빅데이터분석 양성과정

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday