본문 바로가기
프로그래밍 언어/python 관련

[pandas] groupby 집계 함수 활용법 모음

by code cleaner 2021. 8. 1.
반응형

데이터 프레임에서 집계하여 활용하는 다양한 방법 모음


활용 예시 데이터셋

import pandas as pd
import numpy as np
raw_data = {'id':['id1', 'id2', 'id3','id2', 'id3'],
            'data1':[34,12,5,45,67],
            'data2':[1234,3255,3245,4356,7032]}
df = pd.DataFrame(raw_data)
print(df)
>>> print(df)
    id  data1  data2
0  id1     34   1234
1  id2     12   3255
2  id3      5   3245
3  id2     45   4356
4  id3     67   7032

1. 간단한 집계

sum(), count(), min(), max(), mean(), median() 둥....

# 특정 컬럼(id) 하나를 기준으로 합계 구하기
print(df.groupby('id').sum())

>>> print(df.groupby('id').sum())
     data1  data2
id
id1     34   1234
id2     57   7611
id3     72  10277

# 여러 컬럼(id, data1) 순서대로 합계 구하기
print(df.groupby(['id', 'data1']).sum())
>>> print(df.groupby(['id', 'data1']).sum())
           data2
id  data1
id1 34      1234
id2 12      3255
    45      4356
id3 5       3245
    67      7032

2. 함수 여러 개를 한번에 집계하기

# 특정 컬럼(id)를 기준으로 최소값, 합계, 최대값 구하기
# 입력시 str, 함수명으로 모두 작성 가능함
print(df.groupby('id').aggregate([min, np.sum, 'max']))
>>> print(df.groupby('id').aggregate([min, np.sum, 'max']))
    data1         data2
      min sum max   min    sum   max
id
id1    34  34  34  1234   1234  1234
id2    12  57  45  3255   7611  4356
id3     5  72  67  3245  10277  7032

# 특정 컬럼(id)를 기준으로 컬럼 하나는 최소값, 다른 컬럼은 최대값 구하기
print(df.groupby('id').aggregate({'data1':'min', 'data2':'max'}))
>>> print(df.groupby('id').aggregate({'data1':'min', 'data2':'max'}))
     data1  data2
id
id1     34   1234
id2     12   4356
id3      5   7032

3. 특정 조건으로 집계하기

groupby에 조건 넣기filter 로 특정 조건의 데이터만 뽑기

apply 와 lambda 로 컬럼간 계산된 값 구하기

# 특정 컬럼이 특정 값 이상의 여부에 따라 집계하기
# data1이 60이상일때의 합계와 60미만일 때의 합계 구하기
print(df.groupby(df['data1'] > 60).sum())
>>> print(df.groupby('id').aggregate({'data1':'min', 'data2':'max'}))
     data1  data2
id
id1     34   1234
id2     12   4356
id3      5   7032

# 특정 컬럼이 특정 값 이상일 때의 데이터 추출하기
# data1이 60 이상일 때의 데이터 확인하기
def select_sixty_upper(x):
    return x['data1'] > 60
print(df.groupby('data1').filter(select_sixty_upper))
>>> print(df.groupby('data1').filter(select_sixty_upper))
    id  data1  data2
4  id3     67   7032

# 특정 컬럼을 기준으로 데이터들 간의 계산된 값 구하기
print(df.groupby('id').apply(lambda x : x.max() - x.min()))
>>> print(df.groupby('id').apply(lambda x : x.max() - x.min()))
     data1  data2
id
id1      0      0
id2     33   1101
id3     62   3787
반응형