본문 바로가기

Pandas/응용

판다스 - groupby : apply

반응형
가장 일반적인 Groupby 메서드의 목적은 apply이다.

 

아니 agg를 쓰면 되지 굳이?

 

agg는 이전 포스팅에서 설명한 바와 같이

 

사용자 정의 함수를 이용할 수 있지만, 집계함수에 한해 가능하다.

 

판다스 객체의 개별 원소를 특정 함수에 1:1 매핑하려면

 

apply를 이용해야 하는 것이다.

 

 

 

 

간단한 예시를 통해 살펴보자

 

 

원본 데이터프레임

 

grouped

 

 

 

 

마이너스라는 사용자 정의 함수를 만들어보자

 

매우 간단하다.

 

바로 apply를 적용해보면

 

 

너무 당연하게도, 에러가 발생한다.

 

에러 메세지에 의하면 문자열과 숫자는 연산이 불가능하다는 것인데

 

이처럼 apply는 agg처럼

 

사용자 정의함수별로

 

연산가능한 컬럼만 선정해서 해주지 않는다.

 

이럴땐 컬럼명을 명시한 뒤 작업을 요청하면 된다.

 

 

val 컬럼은 숫자가 있으므로 연산이 가능해졌다.

 

 

 

 

 

그렇다면 apply 안에서 컬럼을 명시하면 어떻게 될까?

 

 

시리즈로 리턴되는 것은 같으나

 

멀티 인덱스를 가진다.

 

A그룹의 0이 -1로,

 

3이 2로 연산되어서 나옴을 볼 수 있다.

 

 

멀티인덱스 확인

 

 

 

 

agg는 어떨까?

 

에러 메세지를 접은 상태

 

어떤 방법이든 다 에러가 나온다.

 

사용자 정의 함수가 집계함수와 관련이 없기 때문이다.

 

 

 

 

 

apply를 조금만 더 응용해서 보자

 

원본 데이터프레임
알파벳별로 그룹화

 

 

함수 정의

 

빈 값을 평균값으로 채우겠다는 함수이다.

 

 

 

 

 

 

모든 컬럼이 숫자이기에 따로 컬럼명을 명시하지 않아도

 

apply 함수가 잘 적용되었다.

 

 

 

사각형 박스가 체크되어있는 행이 원래는 빈 값이었다.

 

A그룹은 2개 행

 

B그룹은 3개 행

 

C그룹은 4개 행

 

 

 

 

 

B그룹을 기준으로 설명하자면

 

val컬럼의 평균값은 (4 + 5) / 2 = 4.5다.

 

그래서 4.5가 채워진 것이다.

 

 

val2 컬럼의 평균값은 (50 + 60) / 2 = 55다.

 

그래서 55가 채워진 것이다.

 

 

 

한 컬럼의 평균이 아닌 

 

그룹별 평균값으로 채워진 것이다.

 

 

 

 

 

컬럼을 기준으로 apply

 

컬럼을 명시하고 함수를 적용해도 시리즈가 나오며

 

평균값이 잘 채워진 것을 확인할 수 있다.

반응형