25. 그룹 연산

따또·2021년 7월 26일
0

Pandas DA

목록 보기
25/31
post-thumbnail

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')

profile
따또의 DA 벨로그

0개의 댓글