1) 그룹 객체 만들기 (분할 단계)
import pandas as pd
import seaborn as sns
titanic = sns.load_dataset('titanic')
df = titanic.loc[:, ['age', 'sex', 'class', 'fare', 'survived']]
grouped = df.groupby(['class'])
# class 별로 데이터프레임을 분할
for key, group in grouped:
print('key : ', key) # 그룹의 key 값인 class 값 출력
print('number: ', len(group)) # 그룹에 속한 데이터 값의 수 출력
print(group.head()) # 그룹별 상위 5개 항목 출력
print('\n')
average = grouped.mean()
# group 별 연산 가능한 다른 열에 대해서 평균값 계산
print(average)
group3 = grouped.get_group('Third')
# Third class만 선택
print(group3.head())
grouped_two = df.groupby(['class', 'sex'])
for key, group in grouped_two:
print('key : ', key) # 그룹의 key 값인 class와 sex 값 출력 (경우가 3 * 2 = 6 가지)
print('number: ', len(group)) # 그룹에 속한 데이터 값의 수 출력
print(group.head()) # 그룹별 상위 5개 항목 출력
print('\n')
average_two = grouped_two.mean()
# class와 성별을 기준으로 그룹화한 것을 연산 가능한 다른 열에 대해서 평균값 계산
print(average_two)
print('\n')
group3f = grouped_two.get_group(('Third', 'female'))
# class가 Third 이고 sex가 female인 그룹만 추출
print(group3f.head())
2) 그룹 연산 메소드 (적용 - 결합 단계)
import pandas as pd
import seaborn as sns
titanic = sns.load_dataset('titanic')
df = titanic.loc[:, ['age', 'sex', 'class', 'fare', 'survived']]
grouped = df.groupby(['class'])
# class 별로 데이터프레임을 분할
std_all = grouped.std()
# 각 그룹에 대한 모든 열의 표준편차를 데이터프레임으로 만드는 작업
print(std_all)
print('\n')
std_fare = grouped.fare.std()
# 각 그룹에 대한 fare열의 표준편차를 집계하여 시리즈로 반환
print(std_fare)
def min_max(x):
return x.max() - x.min()
# 각 그룹의 최대값과 최소값을 반환하는 함수
agg_minmax = grouped.agg(min_max)
print(agg_minmax)
agg_all = grouped.agg(['min', 'max'])
# 모든 열에 동일 함수인 min과 max 함수 적용
print(agg_all)
print('\n')
agg_sep = grouped.agg({'fare' : ['min', 'max'], 'age':'mean'})
# fare 열에는 min과 max 함수 적용
# age 열에는 mean 함수 적용
print(agg_sep)
age_mean = grouped.age.mean()
# 그룹별 age 열의 평균값 구하기
print(age_mean)
def z_score(x):
return (x-x.mean())/x.std()
# z-score 를 구하는 함수
age_zscore = grouped.age.transform(z_score)
# 그룹별 age열의 z-score를 구하는 함수
print(age_zscore.loc[0:9])
# 첫 10개의 z-score 출력
grouped_filter = grouped.filter(lambda x : len(x) >= 200)
# 그룹별 데이터 수가 200개 이상만 출력
print(grouped_filter.head())
agg_grouped = grouped.apply(lambda x : x.describe())
# 각 그룹별 요약 통계 정보 집계
print(agg_grouped)
def z_score(x):
return (x - x.mean()) / x.std()
age_zscore = grouped.age.apply(z_score)
# 그룹별 age열의 z-score를 구하는 함수
print(age_zscore)
age_filter = grouped.apply(lambda x : x.age.mean() < 30)
# age 열의 데이터 평균이 30보다 작은 그룹만을 필터링하여 출력
for x in age_filter.index:
if age_filter[x]==True:
age_filter_df = grouped.get_group(x)
print(age_filter_df.head())
print('\n')