Introduction

  • 이전 강의에서 배웠던 maps는 DataFrame과 Series에 있는 값을 하나의 값으로 변환해 낼 수 있었다.
  • 하지만, 때로는 우리는 데이터를 하나로 묶거나 그룹별로 어떠한 일을 하기를 원한다.
  • 우리는 이러한 일을 groupby()를 통해 하게 될 것이다.
  • 그리고 이 강의를 통해 데이터에 index를 줄 수 있는 여러 복잡한 방법을 소개하고 데이터를 sorting하는 방법을 소개하며 마무리 할 예정이다.

Groupwise analysis

  • 우리가 여태까지 그래도 많이 썼던 function 중 value_counts() 라는 함수가 있다. 이 함수를 우리는 다음과 같이 구현해 낼 수 있다.
reviews.groupby('points').points.count()

points
80     397
81     692
    ... 
99      33
100     19
Name: points, Length: 21, dtype: int64
  • groupby()는 그룹을 생성하고 같은 값을 그룹을 생성한다.
  • 그리고 각 그룹에 대해서 우리는 points column을 가져와서 수를 세주는 것이다.
  • value_counts()가 이러한 groupby() 함수의 간단한 버전이라고 보면 된다.
  • 우리가 배웠던 summary function들도 groupby를 이용해서 구현이 가능하다.
reviews.groupby('points').price.min()

points
80      5.0
81      5.0
    ... 
99     44.0
100    80.0
Name: price, Length: 21, dtype: float64
  • 위의 방법은 각 점수의 그룹중에 price가 가장 작은애를 뽑아낸 것이다.
  • groupby() 함수이 DataFrame의 slice를 만들어 낸다고 보면 된다.
  • 이러한 groupby()로 생성된 DataFrame은 apply()로도 접근이 가능하다.
reviews.groupby('winery').apply(lambda df: df.title.iloc[0])

winery
1+1=3                          1+1=3 NV Rosé Sparkling (Cava)
10 Knots                 10 Knots 2010 Viognier (Paso Robles)
                                ...                        
àMaurice    àMaurice 2013 Fred Estate Syrah (Walla Walla V...
Štoka                         Štoka 2009 Izbrani Teran (Kras)
Length: 16757, dtype: object
  • 또 하나 이상의 column으로 그룹핑할 수도 있다.
  • best wine을 country와 province에 따라 뽑아보고 싶다면 다음과 같이 하면 된다.
reviews.groupby(['country', 'province']).apply(lambda df : df.loc[df.points.idxmax()])
  • 또다른 groupby() 함수 중에 얘기해볼만 한 것 중 agg()가 있다.
  • 이 친구는 여러개의 함수를 동시에 DataFrame에 적용하고 한눈에 볼 수 있게 해준다.
reviews.groupby(['country']).price.agg([len, min, max])

Multi-indexes

  • 여태까지 우리가 배웠던 것들은 대부분 하나의 label을 index하는 것들이었다.
  • groupby()는 조금 다르다. 우리가 어떻게 쓰느냐에 따라 index를 여러개 줄 수도 있다.
countries_reviewed = reviews.groupby(['country', 'province']).description.agg([len])
mi = countries_reviewed.index
type(mi)

pandas.core.indexes.multi.MultiIndex
  • 이렇게 두개이상의 index를 가진 애들을 담당하기 위해 여러가지 method가 생겨났다.
  • 이 함수들을 잘 사용하는 것은 pandas를 처음 접한 사람들에게 매우 중요하다.
  • 우리가 아마 제일 많이 사용하게 될 것은 이런 multi index를 regular index로 바꿔주는 reset_index() 함수일 것이다.
countries_reviewed.reset_index()

Sorting

  • 다시 countries_reviewd를 보자. reset_index()를 거치고 나면 자연스럽게 글자 순으로 sorting 된 것을 볼 수 있을 것이다.
  • groupby의 결과 순서는 data가 아닌 index의 값에 의해 결정된다.
  • 우리는 이러한 값들을 순서대로 만들기 위해서는 sort_values()를 이용하면 된다.
countries_reviewed.sort_values(by='len')
countries_reviewed.sort_values(by='len', ascending=False)
  • 하나 이상의 값으로 sorting이 가능하기도 하다
countires_reviewed.sort_values(by=['countries', 'len'])
  • 점점 tutorial을 따라가는 것도 어려워진다.
  • 좀만 더 집중해서 계속 따라가보자!