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형을 반환
다음과 같이 data2의 평균이 4초과인 데이터만을 불러오도록 할 수 있다.
데이터 전체를 변환할 수 있다. (결과는 입력과 같은 사이즈를 가진다)
각 값에서 key별 평균값을 뺐다.
transform과 다르게 apply는 부분적으로 연산을 할 수 있다.
data1에서 key별 data2의 평균 값을 빼주었다.
단일 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을 사용하면 매우 간단하다.
'Python > Pandas' 카테고리의 다른 글
pd.concat / df.append / pd.merge (1) | 2020.03.13 |
---|---|
14. Pandas - 다중인덱싱(Multi Index) (0) | 2020.03.12 |
13. Pandas - 결측값(Nan, None) (0) | 2020.03.04 |
12. Pandas 정리 - 객체 (Series, DataFrame), 인덱싱 (0) | 2020.02.26 |