#정리
#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']))