본문 바로가기

STUDY/Python

[Pandas] 데이터 그룹별 집계 - NamedAgg

 

데이터를 그룹별로 집계할 때에 보통 groupby()를 쓰곤 한다.

 

아래와 같은 데이터프레임이 있다고 하자.

특정 호텔 리뷰 관련 데이터를 웹 스크래핑으로 가져온 것이다(여기 참고).

 

 

 

작성자ID별 리뷰가 몇개인지 알고 싶다거나, 숙박 날짜별 리뷰가 몇개인지 알고 싶다거나 할 때 groupby를 쓰곤 한다.

 

이런 식으로!

숙박 날짜별 몇 명의 고객이 리뷰를 작성했을까?

 

 

groupby와 평균, 개수, 최대, 최소 등등의 집계함수를 사용해 목적에 맞게끔 데이터를 그룹화 할 수 있는데, 동일한 컬럼에 대해 여러 집계 함수를 사용하거나 한 번에 여러 종류의 집계를 하고 싶을 때가 있다.

 

이럴 때 사용할 수 있는 것이 Pandas의 NamedAgg() 메서드다.

 

사용법... 이랄 건 딱히 없고 groupby, 집계함수를 사용하는 것과 비슷하다. 집계함수를 어떤 컬럼에 적용할지, 어떤 집계함수를 적용할지를 넣어주면 된다.

 

백문이 불여일견이라, 한번 보도록 하자.

 

숙박 날짜별 종합 평점의 최대값과 평균값, 리뷰ID의 개수를 알고싶다.

아래와 같이 코드를 작성한다.

pd.NamedAgg()

 

groupby에 어떤 컬럼에 대해 집계할지(숙박 날짜 컬럼)를 지정해준 것은 기존 방법과 별 다를게 없는데, 그 뒤가 다르다.

 

pd.NamedAgg는 인자를 두 개 받는다. column과 aggfunc

column는 그룹화 할 컬럼을 받고, aggfunc는 해당 컬럼을 그룹화 할 집계함수를 받는다.

 

그리고 보다시피 집계된 결과의 컬럼명을 미리 지정해줄 수 있다.

 

 

조금 더 복잡한 집계도 해 보자.

 

해당 데이터프레임에는 평점 데이터가 있다. 리뷰 관련 데이터니까.

 

전체 리뷰 수와 평점이 3점 이하인 리뷰 수를 구해보자.

아래와 같이 코드를 작성 후 실행한다.

 

 

 

 

 

NamedAgg를 굳이 사용하지 않아도 좋은 그룹화가 가능하지만, 이것저것 다양한 방법을 시도해 보는 것도 좋을 것 같다.