데이터분석 : 1. 데이터 생성 및 읽기
데이터분석 : 2. 인덱싱, 선택 및 할당
데이터분석 : 3. 요약 기능 및 맵
데이터분석 : 4. 그룹화 및 정렬
데이터분석 : 5. 데이터 유형 및 결측값
데이터분석 : 6. 이름 변경 및 결합
맵(Map)은 DataFrame이나 Series에서 한 번에 한 값씩 데이터를 변환할 수 있도록 해준다.
그러나 종종 데이터를 그룹화하고 해당 그룹에 대해 특정 작업을 수행하고 싶을 때가 있다.
SQL에서 처럼 말이다
이러한 작업을 groupby() 연산을 사용하여 수행한다.
또한 데이터프레임을 더 복잡하게 인덱싱하는 방법과 데이터를 정렬하는 방법을 배워보자
이전과 마찬가지로 Keggle데이터를 활용하여 실행하자.
import pandas as pd reviews = pd.read_csv("../input/wine-reviews/winemag-data-130k-v2.csv", index_col=0) pd.set_option("display.max_rows", 5)
reviews.groupby('points').points.count()
points
80 397
81 692
...
99 33
100 19
Name: points, Length: 21, dtype: int64
groupby() 함수는 동일한 점수를 할당한 와인에 대한 그룹을 생성한다.
그런 다음 각 그룹에 대해 points 열을 가져와서 해당 열이 얼마나 자주 나타나는지 계산한다.
value_counts()는 이러한 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
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
reviewer_mean_ratings = reviews.groupby('taster_name')['points'].mean()
or
reviewer_mean_ratings = reviews.groupby('taster_name').points.mean()
groupby() 함수를 사용하여 'taster_name' 열을 기준으로 DataFrame을 그룹화한다.
그리고 mean() 함수를 사용하여 각 그룹에서 'points' 열의 평균값을 계산한다.
이를 통해 각 리뷰어별로 평균 평점을 구할 수 있다.
country_variety_counts = reviews.groupby(['country', 'variety']).size().sort_values(ascending=False)
groupby() 함수를 사용하여 'country'와 'variety' 열을 기준으로 DataFrame을 그룹화한다.
그리고 size() 함수를 사용하여 각 그룹의 크기, 즉 등장 횟수를 계산합니다.
이를 통해 각 국가와 와인 품종의 조합별로 등장 횟수를 얻을 수 있습니다.
마지막으로, sort_values(ascending=False)함수를 사용하여 등장 횟수를 기준으로 내림차순으로 정렬합니다.
reviews.groupby(['country', 'province']).apply(lambda df: df.loc[df.points.idxmax()])
reviews.groupby(['country']).price.agg([len, min, max])
price_extremes = reviews.groupby(['variety').price.agg([min, max])
groupby() 함수를 사용하여 'variety' 열을 기준으로 DataFrame을 그룹화한다.
agg() 함수를 사용하여 각 그룹에서 'price' 열의 최소값과 최대값을 계산합니다. agg() 함수의 인자로는 계산하려는 통계 함수들을 전달합니다. 여기서는 최소값과 최대값을 계산하기 위해 min과 max 함수를 사용합니다.
sorted_varieties = price_extremes.sort_values(by=['min', 'max'], ascending=False)
groupby()를 효과적으로 사용하면 데이터셋에서 다양하고 효율적인 작업을 수행할 수 있다.
countries_reviewed = reviews.groupby(['country', 'province']).description.agg([len])
countries_reviewed
mi = countries_reviewed.index
type(mi)
pandas.core.indexes.multi.MultiIndex
countries_reviewed.reset_index()
countries_reviewed = countries_reviewed.reset_index()
countries_reviewed.sort_values(by='len')
countries_reviewed.sort_values(by='len', ascending=False)
countries_reviewed.sort_values(by=['country', 'len'])
countries_reviewed.sort_index()
best_rating_per_price = reviews.groupby('price')['points'].max().sort_index()
reviews DataFrame을 'price' 열을 기준으로 그룹화하고, 각 그룹에서 'points' 열의 최대값을 계산한다. 그리고 sort_index() 함수를 사용하여 가격을 기준으로 Series를 오름차순으로 정렬한다.