본문 바로가기

Pandas/응용

판다스 - groupby : 그룹 객체별, 기준 컬럼의 상위 N개의 행만 추출

반응형

https://steadiness-193.tistory.com/130

 

판다스 - groupby : 그룹 객체별 상위 N개의 행만 추출

타이타닉 데이터프레임을 pclass와 성별 컬럼으로 그룹화 그룹별 데이터 개수 여기서 그룹별 fare(요금) 컬럼 기준으로 상위 50개씩만 추출하려면? 1. lambda 함수 이용 위 lambda 함수를 apply와 함께 이�

steadiness-193.tistory.com

 

위 포스팅에선 fare 컬럼을 기준으로 상위 50개 행을 그룹별로 추출해

데이터프레임으로 반환했다.

 

 

이번엔 기준 컬럼을 자유롭게 바꿔보고, 상위 N개의 행도 원하는 만큼 시리즈로 뽑아내보자.

 

이번 포스팅에선 value_counts가 아니라 nlargest를 사용한다.

 

 

 

 

 

nlargest에 대한 상세 내용은 아래 포스팅 참조

 

https://steadiness-193.tistory.com/218

 

판다스 - 값이 높은 n번째까지 출력 : nlargest

시리즈.nlargest(n, keep='first') n : 상위 몇개까지 나타낼 것인가 keep='first' : 동등한 값이 있다면 제일 먼저 나온 값을 보여준다. 시리즈의 경우엔 컬럼을 명시할 필요 없다. 데이터프레임.nlargest(n, col

steadiness-193.tistory.com

 

 

 

 

 

데이터 불러오기

 

 

 

 

 

 

함수 정의

 

 

위 함수는 그룹객체에 적용가능하며

 

그룹별로 key_column을 기준으로 상위 N개의 시리즈를 추출한다.

 

 

 

 

 

그룹 객체 정의

 

 

승객 등급별로 묶은 객체를 grouped로 정의했다.

 

 

 

 

 

grouped에 함수 적용

 

 

요금을 많이 낸 승객을 등급별로 7명씩 뽑아냈다.

 

 

 

 

 

 

원리 파악

 

1등급인 first 그룹에서

 

 

fare 컬럼의 상위 7개를 가져오는 것이다.

 

 

 

 

 

 

 

 

 

그룹 객체를 원하는 컬럼으로 한번 더 그룹핑 한 뒤
fare 컬럼 기준으로 상위 N개 시리즈 추출

 

 

위 함수는 그룹객체를 인풋으로 받는다.

 

단, 그룹객체를 다시 한번 grouping_col로 그룹핑한 뒤

 

그 그룹핑된 객체의 fare 컬럼을 기준으로

 

상위 N개를 시리즈로 추출한다.

 

 

 

 

 

 

함수 실행

 

 

승객 등급으로 그룹핑한 grouped를 

 

각 그룹별로

다시 한번 성별로 그룹핑한 뒤

 

그 그룹핑한 객체의 fare 상위 3개씩 뽑아냈다. 

 

 

 

 

 

 

만약 다시 한번 그룹핑하는 컬럼이 많은 행을 포함한다면?

 

나이대 컬럼 추가

 

 

 

 

get_groups_fare_top7 함수 실행

 

 

위 결과는 등급과 나이대별로 요금을 많이 낸 상위 3명을 뽑아낸 것이다.

 

 

 

 

 

그게 아니라, 등급별로 요금을 많이 낸 상위 나이대 그룹을 찾고 싶다면

 

 

단순히 합계를 붙여주면 된다.

 

 

 

 

get_groups_fare_sum_top7 실행

 

 

위 결과를 해석하자면

 

1등급 좌석에선 30대-20대-40대 순으로 낸 요금의 합이 높았다.

 

 

 

 

 

 

** 참고

 

시리즈가 아니라 데이터프레임 형태로 보고 싶다면 return에 pd.DataFrame을 이용하면 된다.

 

 

 

 

 

이처럼 다양하게 함수를 정의해서 그룹객체를 응용할 수 있다.

 

 

반응형

'Pandas > 응용' 카테고리의 다른 글

판다스 - 라벨링(Labeling)  (0) 2020.08.24
판다스 - datetime : dt 연산자 활용  (0) 2020.08.13
판다스 - 값이 높은 n번째까지 출력 : nlargest  (0) 2020.08.09
판다스 - map : dict.get  (0) 2020.08.09
판다스 - map  (0) 2020.08.09