본문 바로가기
Python/빅데이터분석기사(실기)

[빅분기실기]_작업형 1유형 까먹을 것 같은 것 정리하기!(2)_groupby

by ssolLEE 2023. 10. 12.
반응형

GROUPING

  • host_name 컬럼에서 각 host_name의 빈도수를 구하고 host_name으로 정렬하여 상위 5개 출력하기
    • groupby('컬럼명').size() :  컬럼의 각 unique value끼리 묶어 주는 것(grouping)이 groupby()입니다. 
    • size()는 묶어준 각 group의 요소들의 count(size)를 계산하여 Series로 반환합니다. 
df.groupby('host_name').size().head()
또는
df.host_name.value_counts().sort_index()

  • host_name의 빈도수를 구하고 빈도수 기준 내림차순 정렬한 데이터 프레임 만들기. 빈도수 컬럼은 counts.
df.groupby('host_name').size()\
	.to_frame().rename(columns = {0:'counts'})\
	.sort_values('counts', ascending=False)

  • neighbourhood_group의 값에 따른 neighbourhood 컬럼 값의 갯수 구하기
df.groupby(['neighbourhood_group', 'neighbourhood'], as_index=False).size()

  • neighbourhood_group의 값에 따른 neighbourhood 컬럼 값 중 neighbourhood_group 의 최댓값 출력
    • 저는 size().max()라고 해서 틀렸네요. ㅠㅠ 문제를 그대로 코드로 옮기는 연습 필요합니다!
df.groupby(['neighbourhood_group', 'neighbourhood'], as_index=False).size()\
	.groupby(['neighbourhood_group'], as_index=False).max()

  • neighbourhood_group 값에 따른 price의 평균, 분산, 최대, 최솟값 구하기
    • 먼저 neighbourhood_group 컬럼과 price 컬럼을 선택합니다. 
    • neighbourhood_group 을 기준으로 grouping합니다.
    • grouping을 한 경우 agg()를 이용하여 리스트([ ])된 내용(mean, var, max, min)을 출력해줍니다. 
df[['neighbourhood_group', 'price']]\
	.groupby('neighbourhood_group').agg(['mean', 'var', 'max', 'min'])

  • neighbourhood 값과 neighbourhood_group 값에 따른 price의 평균을 계층적 indexing 없이 구하고 NaN은 -999로 채우기
    •  fillna()는 결측치를 채우는 방법입니다.
    • 다음 그림을 보며 stack()과 unstack()을 이해합시다.
    • grouping 한 후, 데이터프레임의 구조를 바꿀 때 유용하게 사용합니다.

이미지 출처:  {Medium Blog} Reshaping a DataFrame with Pandas stack() and unstack()

 

 
df.groupby(['neighbourhood', 'neighbourhood_group']).price.mean().unstack().fillna(-999)
  • neighbourhood_group 값에 따른 room_type 컬럼의 숫자를 구하고 neighbourhood_group 값을 기준으로 각 값의 비율 구하기
  • 이건 하나 하나 해볼게요.
df[['neighbourhood_group', 'room_type']].groupby(['neighbourhood_group', 'room_type']).size()

  • unstack()을 하니 room_type의 하위 항목이 세로 줄로 옵니다.
df[['neighbourhood_group', 'room_type']].groupby(['neighbourhood_group', 'room_type']).size().unstack()

  • 비율을 구합니다.
dfdf.loc[:,:] = (dfdf.values / dfdf.sum(axis=1).values.reshape(-1, 1))

 

GROUPING은 원래 어려운 코드입니다.

하지만 데이터 가공할때 많이 사용하게 됩니다.

세부적인 것들을 꼭 기억해서 잘 이용하도록 해보아요.

 

오늘도 감사합니다.