Ch10. 데이터 집계와 그룹 연산

groupby

  • 하나 이상의 키 (함수, 배열, DataFrame의 컬럼 이름)을 이용해서 pandas 객체를 여러 조각으로 나누는 방법

  • 합계, 평균, 표준편차, 사용자 정의 함수 같은 그룹 요약 통계를 계산하는 방법

  • 정규화, 선형회귀, 등급 또는 부분집합 선택 같은 집단 내 변형이나 다른 조작을 적용하는 방법

  • 피벗테이블과 교차알람표를 구하는 방법

  • 변위치 분석과 다른 통계 집단 분석 수행 방법

그룹 연산

1) 분리 : Series, DataFrame 같은 pandas 객체나 다른 객체에 들어있는 데이터를 하나 이상의 키를 기준으로 분리 2) 적용 : 분리하고나서 함수를 각 그룹에 적용시켜 새로운 값을 얻어낸다 3) 결합 : 함수를 적용한 결과를 하나의 객체로 결합

import pandas as pd
import numpy as np
df=pd.DataFrame({'key1':['a','a','b','b','a'],
                 'key2':['one','two','one','two','one'],
                 'data1':np.random.randn(5),
                 'data2':np.random.randn(5)})

--1번 --                 
df  

--그룹화하기 
grouped=df['data1'].groupby(df['key1']) 
grouped 
Out[6]: pandas.core.groupby.generic.SeriesGroupBy object at 0x000001C1DB1EA8C8>

--2번--
grouped.mean() 

--3번--
means=df['data1'].groupby([df['key1'],df['key2']]).mean()
means

그룹간 순회하기 groupby 객체는 이터레이션을 지원하는데, 그룹 이름과 그에 따른 데이터 묶음을 튜플로 변환 색인이 여럿 존재하는 경우 튜플의 첫번 원소개 색인값이 된다

for (k1, k2), group in df.groupby (['key1','key2']):
    print(k1,k2)
    print(group)
    
>> 
a one
  key1 key2     data1     data2
0    a  one -0.024626  2.001824
4    a  one -0.031818 -2.083315
a two
  key1 key2     data1    data2
1    a  two -0.535523 -0.28868
b one
  key1 key2     data1     data2
2    b  one -0.727394 -1.257175
b two
  key1 key2     data1     data2
3    b  two  0.771112  2.316629     

print(k1,k2) --만 했을 때 
>>
a one
a two
b one
b two

그룹별 데이터를 사전형으로 바꿔서 원하는 데이터만 골라낼 수 있다 ex) pieces = dict(list(df.groupby('key1)))

df데이터 중에서 data2 컬럼에 대해서만 평균을 구하고 싶을 때 df.groupby(['key1', 'key2'])[['data2]].mean

컬럼값을 가지고 매핑할수도 있다. 함수(ex- len) , 색인 단계로 그룹핑할 수 있다. 이 기능 사용하려면 level 예약어를 사용해서 레벨 번호나 이름을 넘기면 된다.

데이터 집계

count, sum, mean, median, std, var, min, max, prod, first, last 등등

--df는 위에 있는 df 사용 
grouped = df.groupby('key1')
def peak_to_peak(arr):
    return arr.max()-arr.min()
    
grouped.agg(peak_to_peak)
>>
        data1    data2
key1
a    0.745491    0.773204
b    0.177349    0.762043

컬럼마다 다른 함수를 적용하고 싶을 때, agg 메서드에 컬럼 이름에 대응하는 함수가 들어있는 사전을 넘긴다 ex) grouped.agg({'data1':np.max,'data2':sum})

색인되지 않은 형태로 집계된 데이터 반환하려면 as_index = False 를 넘겨서 색인되지 않도록 할 수 있다

Apply

시리즈 s에서 null 값을 평균값으로 대체하기 ex) s=pd.Series(np.random.randn(6)) s[: : 2]=np.nan s.fillna(s.mean())

Last updated

Was this helpful?