본문 바로가기

Python

[Python] 판다스(pandas)_7.pivot - 데이터프레임 재구성

#정리

#12pivot - 데이터프레임 입맛에 맞게 재구성하기

#데이터의 재구조화 : 분석 대상이 분석 기법에 맞지 않을 때, 행 열의 위치를 바꾸거나 구조를 바꾸는 경우를 말함.

#데이터 재구조화 방법 4가지 

<1.DataFrame.set_index(['컬럼명'])>

#컬럼을 인덱스로 지정할 수 있다.
 - print(df.set_index(['year']))
 - print(df.set_index(['location','year'])) #인덱스가 여러개 올 수 있다.
#set index([column,...]).unstack() : index를 x축, y축으로 펼쳐주어, 아래의 피봇과 같은 결과가 나온다.
 - print(df.set_index(['location','year']).unstack())
 - print(df.set_index(['location','year']).unstack().fillna(0)) #NaN값 0처리
<2. DataFrame.pivot(y축컬럼명,x축컬럼명,표기될 데이터컬럼명)>
 - print(df.pivot('location','year','data1')) 
 - print(df.pivot('location','year','data1').fillna(0))
<3. DataFrame.pivot_table()>
 - print(df.pivot_table(index=['location'])) #지역별로 데이터 평균 보기

 >> print(df[['data1','data2']].groupby(df['location']).mean()) 과 같은 효과

#pivot_table.aggfunc=[옵션] : 데이터 갯수,합계,평균 보기

 - print(df.pivot_table(['data2'],index=['location'],aggfunc=[len])) #지역별 데이터 갯수 표현

 - print(df.pivot_table(['data2'],index=['location'],aggfunc=[np.sum])) #지역별 데이터 합계 표현

 - print(df.pivot_table(['data2'],index=['location'],aggfunc=[len,np.sum,np.mean]))

 - print(df.pivot_table(['data1','data2'],index=['location'],margins=True)) #data1, data2의 지역별 소계(all) 보기
<4. pandas.pivot_table(대상,인덱스)>
 - print(pd.pivot_table(df,index=['year']))

 

 

 

#12pivot - 데이터프레임 입맛에 맞게 재구성하기

#데이터의 재구조화 : 분석 대상이 분석 기법에 맞지 않을 때, 행 열의 위치를 바꾸거나 구조를 바꾸는 경우를 말함.

#데이터 재구조화 방법 4가지 

<1.DataFrame.set_index(['컬럼명'])>

#컬럼을 인덱스로 지정할 수 있다.
 - print(df.set_index(['year']))
 - print(df.set_index(['location','year'])) #인덱스가 여러개 올 수 있다.
#set index([column,...]).unstack() : index를 x축, y축으로 펼쳐주어, 아래의 피봇과 같은 결과가 나온다.
 - print(df.set_index(['location','year']).unstack())
 - print(df.set_index(['location','year']).unstack().fillna(0)) #NaN값 0처리
<2. DataFrame.pivot(y축컬럼명,x축컬럼명,표기될 데이터컬럼명)>
 - print(df.pivot('location','year','data1')) 
 - print(df.pivot('location','year','data1').fillna(0))
<3. DataFrame.pivot_table()>
 - print(df.pivot_table(index=['location'])) #지역별로 데이터 평균 보기

 >> print(df[['data1','data2']].groupby(df['location']).mean()) 과 같은 효과

#pivot_table.aggfunc=[옵션] : 데이터 갯수,합계,평균 보기

 - print(df.pivot_table(['data2'],index=['location'],aggfunc=[len])) #지역별 데이터 갯수 표현

 - print(df.pivot_table(['data2'],index=['location'],aggfunc=[np.sum])) #지역별 데이터 합계 표현

 - print(df.pivot_table(['data2'],index=['location'],aggfunc=[len,np.sum,np.mean]))

 - print(df.pivot_table(['data1','data2'],index=['location'],margins=True)) #data1, data2의 지역별 소계(all) 보기
<4. pandas.pivot_table(대상,인덱스)>
 - print(pd.pivot_table(df,index=['year']))

 

 

--예문 코드 보기--

더보기
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd

print("---------------")
#데이터의 재구조화 : 분석 대상이 분석 기법에 맞지 않을 때
# 행 열의 위치를 바꾸거나 구조를 바꾸는 경우를 말함.
dic = {
	'location':['seoul','busan','daegu','jeju'],
	'year':np.arange(2022,2022+4),
	'data1':np.random.randn(4)
}
df=pd.DataFrame(dic,columns=['year','location','data1'])
print(df)

print("-----<set index>-----")
print(df.set_index(['year']))
print(df.set_index(['location','year']))

print("-----<set index([column,...]).unstack()>-----")
#index를 가로축, 세로축으로 펼쳐주는 기능으로, 아래의 피봇과 같은 결과
print(df.set_index(['location','year']).unstack())
print(df.set_index(['location','year']).unstack().fillna(0))

print("----<DataFrame.pivot()>-----")
#1. DataFrame.pivot(y축컬럼명,x축컬럼명,표기될 데이터컬럼명)
print(df.pivot('location','year','data1'))
print(df.pivot('location','year','data1').fillna(0))
print(df.pivot('year','location','data1').fillna(0))


#2. DataFrame.pivot_table()
print("---------------")
#중복된 연도와, 지역을 추가했다.
dic = {
	'location':['seoul','busan','daegu','jeju']
					+['seoul','busan','daegu','jeju'],
	'year':np.concatenate([np.arange(2022,2022+4),np.arange(2022,2022+4)]),
	'data1':np.random.randn(4*2),
	'data2':np.random.randn(4*2)
}
df=pd.DataFrame(dic,columns=['year','location','data1','data2'])
print(df)
print(df[['data1','data2']].describe())

#지역별 데이터 평균
print("----지역별 데이터 평균 - groupby ----")
print(df[['data1','data2']].groupby(df['location']).mean())
print("----지역별 데이터 평균 - pivot_table ----")
print(df.pivot_table(index=['location']))

#연도별 데이터 평균
print("----연도별 데이터 평균- groupby ----")
print(df[['data1','data2']].groupby(df['year']).mean())
print("----연도별 데이터 평균- pivot_table ----")
print(df.pivot_table(index=['year']))

#data1에 대한 지역과 연도보기
print(df.pivot_table(['data1'],
					index=['location'],
					columns=['year']).fillna(0))

#data2에 대한 지역과 연도보기
print(df.pivot_table(['data1'],
					index=['location'],
					columns=['year']).fillna(0))
					
print("----인덱스별 데이터 갯수 옵션-aggfunc=[len]---")				
print(df.pivot_table(['data2'],
					index=['location'],
					aggfunc=[len]))
					
print("----인덱스별 데이터 합계 옵션-aggfunc=[np.sum]---")				
print(df.pivot_table(['data2'],
					index=['location'],
					aggfunc=[np.sum]))		
					
#group by sum과 같은 결과.
print(df['data2'].groupby(df['location']).sum())	
					
#data2 지역별 여러개 같이 보기
print("----인덱스별 데이터 갯수,합계,평균 같이 보기---")				
print(df.pivot_table(['data2'],
					index=['location'],
					aggfunc=[len,np.sum,np.mean]))		

#data1, data2의 지역별 소계(all) 보기
print(df.pivot_table(['data1','data2'],
					index=['location'],
					margins=True))

#data1, data2의 연도별 소계(all) 보기
print(df.pivot_table(['data1','data2'],
					index=['year'],
					margins=True))
			
					
#3. pandas.pivot_table()
print("--3. pandas.pivot_table()----")
print(pd.pivot_table(df,index=['year']))
print("---------------")
print(pd.pivot_table(df,index=['location']))