가장 일반적인 Groupby 메서드의 목적은 apply이다.
아니 agg를 쓰면 되지 굳이?
agg는 이전 포스팅에서 설명한 바와 같이
사용자 정의 함수를 이용할 수 있지만, 집계함수에 한해 가능하다.
즉 판다스 객체의 개별 원소를 특정 함수에 1:1 매핑하려면
apply를 이용해야 하는 것이다.
간단한 예시를 통해 살펴보자
마이너스라는 사용자 정의 함수를 만들어보자
바로 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가 채워진 것이다.
한 컬럼의 평균이 아닌
그룹별 평균값으로 채워진 것이다.
컬럼을 명시하고 함수를 적용해도 시리즈가 나오며
평균값이 잘 채워진 것을 확인할 수 있다.
'Pandas > 응용' 카테고리의 다른 글
판다스 - groupby : transform(응용) (0) | 2020.06.23 |
---|---|
판다스 - groupby : transform (0) | 2020.06.23 |
판다스 - groupby : filter (len, size, count) (0) | 2020.06.22 |
판다스 - groupby : aggregate, size (0) | 2020.06.22 |
판다스 - groupby : aggregate (agg 메서드 안의 기준 컬럼, count 이용) (0) | 2020.06.22 |