반응형
09-09. 피벗변환 (pivot)
DataFrame.pivot(index=None, columns=None, values=None)
개요
pivot메서드는 데이터의 열을 기준으로 피벗테이블로 변환시키는 메서드 입니다.
사용법
기본 사용법
df.pivot(index=None, columns=None, values=None)
index : 인덱스로 사용될 열입니다.
columns : 열로 사용될 열 입니다.
values : 값으로 입력될 열 입니다.
※ index나 columns에 리스트를 입력 할 경우 멀티 인덱스로 피벗테이블이 생성됩니다.
values에 리스트를 입력 할 경우 각 값에 대한 테이블이 연속적으로 생성됩니다.
반응형
예시
먼저, 아래와 같이 간단한 6x4 객체를 만들어 보겠습니다.
col = ['Machine','Country','Price','Brand']
data = [['TV','Korea',1000,'A'],
['TV','Japan',1300,'B'],
['TV','China',300,'C'],
['PC','Korea',2000,'A'],
['PC','Japan',3000,'E'],
['PC','China',450,'F']]
df = pd.DataFrame(data=data, columns=col)
print(df)
>>
Machine Country Price Brand
0 TV Korea 1000 A
1 TV Japan 1300 B
2 TV China 300 C
3 PC Korea 2000 A
4 PC Japan 3000 E
5 PC China 450 F
기본적인 사용법
index를 Machine으로 columns를 Country로, values를 Price로 피벗 테이블을 생성해보겠습니다.
print(df.pivot(index='Machine',columns='Country',values='Price'))
>>
Country China Japan Korea
Machine
PC 450 3000 2000
TV 300 1300 1000
values값이 list형태일 경우 피벗테이블이 옆쪽으로 연속으로 생성됩니다.
print(df.pivot(index='Machine',columns='Country',values=['Price','Brand']))
>>
Price Brand
Country China Japan Korea China Japan Korea
Machine
PC 450 3000 2000 F E A
TV 300 1300 1000 C B A
참고로, values를 따로 입력하지 않으면 남은 모든 열이 values에 입력되어 연속으로 출력됩니다.
print(df.pivot(index='Machine',columns='Country')
>>
Price Brand
Country China Japan Korea China Japan Korea
Machine
PC 450 3000 2000 F E A
TV 300 1300 1000 C B A
그 상태에서 [열 이름] 형태를 붙여서 원하는 values만 출력할 수 있습니다.
print(df.pivot(index='Machine',columns='Country')['Brand'])
>>
Country China Japan Korea
Machine
PC F E A
TV C B A
Multi index로 피벗 변환
index나 columns에 list형태의 데이터를 입력할 경우 멀티 인덱스 형식으로 피벗 테이블이 생성됩니다.
index가 list형태일 경우
print(df.pivot(index=['Country','Machine'],columns='Brand',values='Price'))
>>
Brand A B C E F
Country Machine
China PC NaN NaN NaN NaN 450.0
TV NaN NaN 300.0 NaN NaN
Japan PC NaN NaN NaN 3000.0 NaN
TV NaN 1300.0 NaN NaN NaN
Korea PC 2000.0 NaN NaN NaN NaN
TV 1000.0 NaN NaN NaN NaN
columns가 list형태일 경우
print(df.pivot(index='Country',columns=['Machine','Brand'],values='Price'))
>>
Machine TV PC
Brand A B C A E F
Country
China NaN NaN 300.0 NaN NaN 450.0
Japan NaN 1300.0 NaN NaN 3000.0 NaN
Korea 1000.0 NaN NaN 2000.0 NaN NaN
피벗변환이 불가한 경우
중복값으로인해 피벗테이블의 생성이 불가능한 경우 오류를 반환합니다.
# 피벗화가 불가능한 중복값이 있는 객체 생성
df2 = pd.DataFrame(data=[['A','x',1],['A','x',2],['B','y',3],['B','z',4]],columns=['col1','col2','col3'])
print(df2)
>>
col1 col2 col3
0 A x 1
1 A x 2
2 B y 3
3 B z 4
# 피벗생성 시 오류 발생
print(df2.pivot(index='col1',columns='col2',values='col3'))
>>
오류발생
ValueError: Index contains duplicate entries, cannot reshape
반응형
'파이썬완전정복-Pandas DataFrame > 09. 가공' 카테고리의 다른 글
Pandas DataFrame 09-11. 피벗해제 (melt) (0) | 2022.01.23 |
---|---|
Pandas DataFrame 09-10. 피벗생성_스프레드시트 기반 (pivot_table) (0) | 2022.01.23 |
Pandas DataFrame 09-08. 차원축소, 스칼라 변환 (squeeze) (0) | 2022.01.23 |
Pandas DataFrame 09-07. 중복행 제거 (drop_duplicates) (0) | 2022.01.23 |
Pandas DataFrame 09-06. 자르기 (truncate) (0) | 2022.01.23 |