[그룹 연산]
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=["도시","연도"])
'Data_Analysis > Numpy, Pandas' 카테고리의 다른 글
[Pandas] Profiling (0) | 2020.10.08 |
---|---|
[Pandas] DataFrame 함수 (where()) (0) | 2020.07.22 |
[Pandas] Concat, Merge (0) | 2020.07.21 |
[Pandas] 결측치 처리 (0) | 2020.07.21 |
[Pandas] DataFrame 함수 (컬럼명 변경, 컬럼 추가/삭제/정렬) (0) | 2020.07.21 |
댓글