본문 바로가기
Data_Analysis/Numpy, Pandas

[Pandas] 그룹연산(groupby, pivot_table)

by Classic! 2020. 7. 21.

[그룹 연산]

1) groupby

2) pivot


1) groupby

: 데이터를 그룹핑하여 객체로 반환. 단독으로 쓰이지 않고, 통계 함수와 함께 사용

 

- 데이터셋 생성

import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt

# 데이터셋 생성
np.random.seed(100)
df1=DataFrame({
    "Gender":["Female","male","Female","male","Female","male","Female","Female"],
    "Smoking":["Smoker","Smoker","Smoker","Non-Smoker","Non-Smoker","Non-Smoker","Non-Smoker","Smoker"],
    "countA":np.random.randint(1,10,8),
    "countB":np.random.randint(1,10,8),
    
})
df1

 

- 통계함수 적용

# groupby함수로 데이터를 그룹핑 + 통계함수 sum 적용
# >> 젠더를 기준으로 각 컬럼의 값을 합산
df1.groupby('Gender').sum()

'''
        countA  countB
Gender                
Female      29      25
male        18       7
'''
# 2개 이상 컬럼으로 그룹핑 가능
# 성별로 흡연여부 그룹핑
# countA열의 합계만 리턴
print(df1.groupby(['Gender'])[["countA"]].sum()) # 시리즈로 반환
'''
        countA
Gender        
Female      29
male        18
'''
# 성별을 기준으로  countB열 값의 평균,개수,중간값,최대/최소값
print(df1.groupby(['Gender'])[["countB"]].agg(['sum','mean','count','median',"max","min"]))
'''
       countB                               
          sum      mean count median max min
Gender                                      
Female     25  5.000000     5      5   9   2
male        7  2.333333     3      3   3   1
'''

 

 

 

2) pivot

: pivot으로 dataFrame 재가공

 

- 데이터 생성

data={
    "도시":["서울","서울","서울","부산","부산","부산","인천","인천"],
    "연도":[2015,2010,2005,2015,2010,2005,2015,2010],
    "인구":[990431,963148,976254,334487,333231,300231,289045,257812],
    "지역":["수도권","수도권","수도권","경상권","경상권","경상권","수도권","수도권"]
}

df2=DataFrame(data)
df2

 

- pivot_table로 재가공

# 행은 '도시', 열은 '연도'에 해당하는 '인구' 데이터
df2.pivot_table(index="도시",columns="연도",values="인구")

# 행은 '도시', 열은 '연도'에 해당하는 '인구'데이터의 합계
df2.pivot_table(index="도시",columns="연도",margins_name="10년간 도시 인구 평균",margins=True)

 

- groupby의 key를 설정한 것과 같은 결과를 얻을 수도 있다

df2.pivot_table(index=["도시","연도"])

 

 

댓글