빅데이터 분석기사/작업 유형 1 (pd)

5/16 그룹별 통계 심화 학습 (groupby, pivot_table)

유방울 2023. 5. 16. 19:50

데이터 값 실수, 소수점 넷째자리 표시 

pd.option.display.floa_format = '{:.2f}'.format

# 데이터 값 실수. 소수점 넷째자리까지 표시
pd.options.display.float_format = '{:.2f}'.format

월/년 별 미세먼지의 mean, min, max

df.pivot_table(index=, columns=, values, aggfunc=)

# [3-48] df_dust의 월/년 별 미세먼지의 'mean', 'min', 'max' 구하기
# pivot_table 사용, values의 경우 목록으로 지정시와 단독 지정시가 다르게 표시됨
# way 1 칼럼 명 안 보여주기
df_dust.pivot_table(index=['월'],columns=['년'],values='미세먼지(㎍/㎥)', aggfunc=['mean', 'min', 'max'])

	mean									min										max
년	2016	2017	2018	2019	2020	2016	2017	2018	2019	2020	2016	2017	2018	2019	2020
월															
1	52.75	55.73	53.88	NaN	43.18	22.00	14.00	15.00	NaN	3.00	127.00	151.00	154.00	NaN	90.00
2	48.29	49.55	56.07	NaN	41.95	9.00	23.00	22.00	NaN	7.00	124.00	135.00	127.00	NaN	103.00
3	66.85	64.54	43.90	NaN	46.35	18.00	19.00	6.00	NaN	18.00	166.00	149.00	141.00	NaN	142.00
4	73.48	59.58	51.98	NaN	45.61	21.00	14.00	5.00	NaN	11.00	270.00	134.00	117.00	NaN	126.00

[] 목록 있으면 -> 표시됨 (미세먼지)

# way 2 칼럼 명 안 보여주기
df_dust.pivot_table(index=['월'],columns=['년'],values=['미세먼지(㎍/㎥)'], aggfunc=['mean', 'min', 'max'])


	mean									min										max
	미세먼지(㎍/㎥)						  미세먼지(㎍/㎥)							미세먼지(㎍/㎥)
년	2016	2017	2018	2019	2020	2016	2017	2018	2019	2020	2016	2017	2018	2019	2020
월															
1	52.75	55.73	53.88	NaN	43.18	22.00	14.00	15.00	NaN	3.00	127.00	151.00	154.00	NaN	90.00
2	48.29	49.55	56.07	NaN	41.95	9.00	23.00	22.00	NaN	7.00	124.00	135.00	127.00	NaN	103.00
3	66.85	64.54	43.90	NaN	46.35	18.00	19.00	6.00	NaN	18.00	166.00	149.00	141.00	NaN	142.00
4	73.48	59.58	51.98	NaN	45.61	21.00	14.00	5.00	NaN	11.00	270.00	134.00	117.00	NaN	126.00

위에와 동일

# [3-49] df_dust에서 '측정소명'이 '강남구'인 데이터의
# 월별(index), 년별(columns), 미세먼지 농도 평균을 조회하여 temp로 저장합니다
# 가능 df_dust.loc[df_dust['측정소명']=='강남구'.:]
# mean은 생략해도 됨 -> 기본값~~
# [] 목록도 생략해도 됨
place = df_dust[df_dust['측정소명']=='강남구']
temp = place.pivot_table(index=['월'],columns=['년'],values=['미세먼지(㎍/㎥)'],aggfunc=['mean'])
temp

	mean
	미세먼지(㎍/㎥)
년	2016	2017	2018	2019	2020
월					
1	52.68	57.61	42.55	NaN	39.00
2	48.48	52.36	50.04	NaN	38.48
3	65.65	64.82	37.10	NaN	40.77
4	78.03	58.10	44.38	NaN	38.40
5	56.50	62.16	33.00	NaN	30.81

미세먼지 농도가 가장 높은 월 위치

칼럼 : int (인티저) 타입

# [3-50] 2016년 ~ 2020년도 미세먼지 농도가 가장 높은 월의 위치
temp = df_dust.pivot_table(index=['월'],columns=['년'],values='미세먼지(㎍/㎥)',aggfunc='mean')

# int64 타입
temp.columns

Int64Index([2016, 2017, 2018, 2019, 2020], dtype='int64', name='년')

for year in [2016, 2017, 2018, 2019, 2020]:
  print(year)
  
2016
2017
2018
2019
2020

칼럼 개수만큼 반복 -> 인덱스에서 가장 max값

가장 높은 월 : argmax()

가장 낮은 월 : argmin()

-> Series.argmax() : 가장 값이 큰 것의 integer index(월) 구하기

# for문 이용해 미세먼저 농도 높은 원
# argmax()
for year in [2016, 2017, 2018, 2019, 2020]:
    idx = temp[year].argmax()
    print(f'{year} 미세먼지 농도 높은 월 : {temp.index[idx]}월')

temp 데이터프레임에 비교할 칼럼 미세먼지, 미세먼지 2020, 차이 넣기

-> 과거, 현재 비교

# [3-52] 2016년 ~ 2019년 월별 미세먼지 평균을 구해 temp (DataFrame)로 저장합니다.
temp = df_dust.loc[df_dust['년']<=2019,:].groupby('월')[['미세먼지(㎍/㎥)']].mean()

# [3-53] 2020년 월별 미세먼지 평균을 구해 temp에 '미세먼지 2020' 컬럼으로 추가합니다.
temp['미세먼지 2020'] = df_dust.loc[df_dust['년']== 2020,:].groupby('월')[['미세먼지(㎍/㎥)']].mean()

# [3-54] temp에 '차이'라는 이름의 컬럼을 추가합니다.
# '차이' = '미세먼지(㎍/㎥)' - '미세먼지 2020'
temp['차이'] = temp['미세먼지(㎍/㎥)'] - temp['미세먼지 2020']
temp

미세먼지(㎍/㎥)	미세먼지 2020	차이
월			
1	54.12	43.18	10.94
2	51.22	41.95	9.27
3	60.38	46.35	14.03
4	62.76	45.61	17.15
5	56.76	36.47	20.29
6	46.27	38.04	8.23
7	32.88	22.13	10.75
8	28.41	22.32	6.09
9	29.75	NaN	NaN
10	32.94	NaN	NaN
11	47.64	NaN	NaN
12	47.02	NaN	NaN