본문 바로가기

카테고리 없음

Pandas 데이터 그룹화

반응형

# 학습내용
- groupby
- 다중 인덱스
- 정렬

import pandas as pd
reviews = pd.read_csv("./lib/input/wine-reviews/winemag-data-130k-v2.csv", index_col=0)
# pd.set_option('max_rows', 100)
print(reviews)

# groupby()는 와인 데이터에서 points 값이 같은 컬럼들 끼리 그룹을 생성 합니다.
# 그다음 points 그룹들에 같은 값들이 몇번 나타나는지를 계산 합니다.
reviews.groupby('points').points.count()
print(reviews.groupby('points').points.count())

# groupby() 함수를 기반으로 가장 저렴한 와인을 얻는 작업을 다음과 같이 수행할 수 있습니다.
reviews.groupby('points').price.min()
reviews.price
print(reviews.price) # price란 이름으로 출력하라...라는 의미!

# 하나의 값을 따지는것이 아닌 여러가지의 값을 따져보자
# apply() 함수를 활용하여 여러 요소의 값을 필터링 할 수 있습니다.
# 예를들어 데이터세트의 각 winery에서 첫번째 와인의 이름을 선택하는 방법 입니다.
reviews.groupby('winery').apply(lambda df: df.title.iloc[0])
print(reviews.groupby('winery').apply(lambda df: df.title.iloc[0]))

# 더 구체적 제어를 위해 하나가 아닌 둘 이상의 열로 그룹화 해야할 수도 있습니다.
# 다음은 국가와 지역별로 최고의 와인을 선택하는 방법의 예 입니다.
reviews.groupby(['country', 'province']).apply(lambda df: df.loc[df.points.idxmax()])
print(reviews.groupby(['country', 'province']).apply(lambda df: df.loc[df.points.idxmax()]))

# groupby()의 메소드 중 agg()에 대해 설명 하겠습니다.
# agg()는 DF에서 동시에 다양한 기능을 실행할 수 있게 해줍니다.
# 예를들면 아래와 같습니다.
reviews.groupby(['country']).price.agg([len, min, max])
print(reviews.groupby(['country']).price.agg([len, min, max]))
# groupby() 함수를 효과적으로 사용하면 같은 데이터를 가지고도 효율적인 분석이 가능 합니다.

# :::: 다중 인덱스 :::::
# 다중 인덱스와 일반 인덱스의 차이
countries_reviewed = reviews.groupby(['country', 'province']).description.agg([len])
countries_reviewed
print(countries_reviewed)
print(type(countries_reviewed))
mi = countries_reviewed.index
type(mi)
print(type(mi))

# reset_index()는 다중인덱싱을 단일인덱싱으로 변환하는 함수이다.
# 다중인덱싱은 자주 사용하는 방법은 아니다. 단일 인덱싱을 더 많이 사용 할 수 있다.
countries_reviewed.reset_index()
print(countries_reviewed.reset_index())

# :::: Sorting(정렬) ::::
# 결과물은 값에 따라 정렬되는 방식이 아닌 인덱스의 순서에 따라 반환되었다는 사실을 확인 했습니다.
# 즉, groupby()의 결과물은 값 보다는 인덱스의 값에 영향을 많이 받습니다.
# 기본이 인덱스로 설정이 되어 있으므로, 값에 따른 정렬을 위해서는 sort_value()를 사용해야 합니다.

countries_reviewed = countries_reviewed.reset_index()
countries_reviewed.sort_values(by='len')
print(countries_reviewed.sort_values(by='len'))

# sort_value()의 기본값은 가장 낮은 값이 먼저오는 오름차순 정렬 입니다.
# 하지만 높은숫자가 먼저오는 내림차순 정렬을 사용하고자 한다면 아래와 같은 방법을 사용해야 합니다.
countries_reviewed.sort_values(by='len', ascending=False)
print(countries_reviewed.sort_values(by='len', ascending=False))

# 만약 다시 인덱스 값을 기준으로 정렬하고자 한다면 아래와 같이 sort_index()를 사용하면 됩니다.
countries_reviewed.sort_index()
print(countries_reviewed.sort_index())

# 한번에 두개 이상의 열을 기준으로 잡고 정렬할 수도 있습니다.
countries_reviewed.sort_values(by=['country','len'])
print(countries_reviewed.sort_values(by=['country','len']))

- 끝 - 

반응형