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/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. 두 변수를 그룹으로, 각 그룹별 데이터 개수이다.
unstack() 으로 좀 더 보기좋게 형태를 바꿀 수 있다.
2. NA를 뺀 데이터 개수는 다음과 같다.
3. sum, min, max
이를 원래의 data 에 컬럼으로 추가하는 방법은 transfrom() 으로 할 수 있다.
1. 'count' 컬럼 추가
2. 'sum' 컬럼 추가
(참고) 물론 group1, group2 가 아닌 group1 에 대한 집계도 컬럼으로 추가할 수 있다.
3. 'min', 'max' 컬럼 추가
4. 직접 정의한 function 적용
min, max 와 같이 기존에 존재하는 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을 제외한 값 중 최대값을 리턴한다.
예시는 다음과 같다.
'Python > Pandas Tutorial' 카테고리의 다른 글
[Python] pandas tutorial :: replace nan/na/null (0) | 2021.01.14 |
---|---|
[Python] pandas tutorial :: drop duplicates in pandas (0) | 2020.10.12 |
[Python] Pandas Tutorial :: groupby (0) | 2020.10.07 |
[Python] Pandas Tutorial :: add row, column (0) | 2020.09.22 |
[Python] Pandas Tutorial :: Drop row or column in pandas DataFrame (0) | 2020.09.22 |