Python/Pandas

pd.groupby / pivot_table (집계연산)

frcn 2020. 3. 27. 17:54
반응형

1. 집계연산

 

기본적으로 pandas에서는 sum( ), mean( ), median( ), min( ), max( )와 같은 기본적인 연산을 지원한다.

 

데이터를 부분적으로 연산하고 싶다면, groupby 또는 pivot_table을 사용하면 된다.

 

 

기본 집계 메서드는 다음과 같다.

 

count( ) -> 데이터 전체 개수

first( ), last( ) -> 첫 데이터, 마지막 데이터

mean( ), median( ) -> 평균값, 중앙값

min( ), max( )

std( ), var( )

mad( ) -> 절대 평균 편차

prod( ) -> 전체 항목의 곱

sum( )

 

 

 

 

2. Groupby( )

 

groupby( )에 원하는 키를 전달해주면 해당 키만을 결합하여 연산을 진행한다.

 

methods별로 묶어서 year열에 대한 분석을 진행하면 다음과 같다.

 

 

 

groupby의 주요 메소드는 다음과 같다.

 

aggregate( ) -> 사용할 연산 지정이 가능

filter( )       -> 필터링을 통과하는 bool값을 리턴해서, 그렇지 않은 데이터는 표현하지 않음

transfrom( ) -> 전체 데이터를 한 번 변환하여 전달

apply( )       -> 임의의 함수를 적용하여, df형이나 Series형을 반환

 

aggregate

 

다음과 같이 data2의 평균이 4초과인 데이터만을 불러오도록 할 수 있다.

filter

 

데이터 전체를 변환할 수 있다. (결과는 입력과 같은 사이즈를 가진다)

 

각 값에서 key별 평균값을 뺐다.

transform

 

transform과 다르게 apply는 부분적으로 연산을 할 수 있다.

 

data1에서 key별 data2의 평균 값을 빼주었다.

apply

 

 

단일 grouping일 때는 groupby('key')이었지만,

 

다중인덱싱을 사용할 경우 groupby( ['key1', 'key2'] )를 사용하면 된다.

 

 

 

3. pivot_table( )

 

 

pandas.pivot_table

(values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False)

 

 

values = column to aggregate, optional

           분석할 데이터

index = column, Grouper, array, or list

           기준 index를 설정(행)

columns = column, Grouper, array, or list

            분석의 대상이 될 열 설정(열)

aggfunc = numpy.mean (default)

            어떤 방식의 연산을 사용할지 제어. 기본적으로는 평균을 사용

fill_value = None (default)

            누락 데이터를 어떻게 채울 것인가

margins = False (default bool) 

             그룹 별 총합을 계산 Add all row / columns (e.g. for subtotal / grand totals).

dropna = True (default bool)

             Do not include columns whose entries are all NaN.

margins_namestr, default ‘All’

            margin을 사용할 시, 이름 설정 (when margins is True.)

observedbool, default False

              카테고리형 데이터인 경우, False는 모든 데이터를 보여줌. True는 관측값만을 보여줌

 

 

 

 

사실 groupby보다는 pivot_table을 사용하는 것이 DataFrame형의 데이터를 분석할 때 더 쉽다.

 

데이터분석에서 가장 쉬운 데이터인 타이타닉 데이터를 보자.

 

성별, 좌석등급 별로 생존율을 보고 싶을 때,  groupby를 사용하면 매우 복잡해지지만 pivot_table을 사용하면 매우 간단하다.

 

기본
다중index, margin사용

 

 

 

 

 

반응형