(BigData Analysis 도전기) Kaggle Pandas Tutorial (4. Grouping and Sorting)
by 줌코딩
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을 따라가는 것도 어려워진다.
- 좀만 더 집중해서 계속 따라가보자!
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Subscribe via RSS