Python/Pandas Tutorial

[Python] Pandas Tutorial :: groupby transform (groupby 결과 컬럼에 추가하기)

슈퍼짱짱 2020. 10. 7. 19:04
반응형

2020/09/18 - [Python/Pandas Tutorial] - [Python] Pandas Tutorial :: pandas란? 데이터프레임이란? 시리즈란?

2020/09/19 - [Python/Pandas Tutorial] - [Python] Pandas Tutorial :: read csv, txt file with pandas

2020/09/21 - [Python/Pandas Tutorial] - [Python] Pandas Tutorial :: Create Data Frame with Dictionary, List

2020/09/21 - [Python/Pandas Tutorial] - [Python] Pandas Tutorial :: Save Pandas Data Frame to CSV file

2020/09/21 - [Python/Pandas Tutorial] - [Python] Pandas Tutorial :: Filtering(Selecting) rows, columns in pandas DataFrame

2020/09/22 - [Python/Pandas Tutorial] - [Python] Pandas Tutorial :: Drop row or column in pandas DataFrame

2020/09/22 - [Python/Pandas Tutorial] - [Python] Pandas Tutorial :: add row, column

2020/10/07 - [Python/Pandas Tutorial] - [Python] Pandas Tutorial :: groupby

 


판다스에서 groupby 결과를 컬럼에 추가하는 방법

 

이전 포스팅에서 pandas groupby 에 대해 알아보았다. 이번에는 groupby로 집계한 결과를 각 group 별로 컬럼에 추가하는 방법을 알아보겠다.

 

먼저, pandas를 import 하고, 실습에 사용한 데이터를 만든다.

 

import pandas as pd

from collections import OrderedDict
import numpy as np

dic = OrderedDict([
    ('col', [1,2,np.nan, 4,np.nan,6,7,8,np.nan,10]),
    ('group1',['A','A','A','A','A','B','B','B','B','B']),
    ('group2',['a1','a1','a2','a2','a2','b1','b1','b2','b2','b3'])
])
data = pd.DataFrame(dic)

 

만들어진 데이터는 다음과 같다.

 

 

이를 group1, group2로 집계한 여러 결과를 컬럼으로 추가한다.

 


컬럼으로 추가하기 전에 집계 결과는 다음과 같다.

 

1. 두 변수를 그룹으로, 각 그룹별 데이터 개수이다.

 

size()

unstack() 으로 좀 더 보기좋게 형태를 바꿀 수 있다.

 

 

2. NA를 뺀 데이터 개수는 다음과 같다.

 

count()

 

 

3. sum, min, max

 

sum(), min(), max()

 


이를 원래의 data 에 컬럼으로 추가하는 방법은 transfrom() 으로 할 수 있다.

 

1. 'count' 컬럼 추가

 

Add 'count' column

 

 

2. 'sum' 컬럼 추가

 

Add 'sum' column

 

(참고) 물론 group1, group2 가 아닌 group1 에 대한 집계도 컬럼으로 추가할 수 있다.

 

(참고) Only 'group1' group

 

 

3. 'min', 'max' 컬럼 추가

 

Add 'min', 'max' column

 

 

4. 직접 정의한 function 적용

 

min, max 와 같이 기존에 존재하는 function 이 아닌, 사용자가 정의한 function 도 정의할 수 있다.

 

직접 정의한 function 적용

 

transform("FUNCTION") 안에 정의한 function 을 넣어주면 된다.

 


(참고) numpy.max() VS pandas.max()

 

위에서 사용자가 정의한 function 부분에 x.max() 가 아니라 max(x) 로 정의했을 때 NaN이 포함된 group 에 대해서는 숫자가 아니라 NaN이 return 되었다. 

 

원인은 max(x) - min(x) 이 numpy 로 부터 정의된 function 이었기 때문이다.

 

numpy.max() 안에 nan이 포함되어 있으면 결과는 nan을 리턴한다.

반면, pandas.max() 는 nan이 포함되어 있어도 nan을 제외한 값 중 최대값을 리턴한다.

 

예시는 다음과 같다.

 

numpy VS pandas example
반응형