wisdiom 아니고 wisdom

3. 데이터프레임 응용(5) 본문

👩‍💻/pandas

3. 데이터프레임 응용(5)

글로랴 2021. 2. 1. 20:42

5️⃣ 그룹 연산

그룹 연산이란 복잡한 데이터에 특정 기준을 적용하여 몇 개의 그룹으로 분할하여 처리하는 것을 말한다.

특히, 그룹 연산은 데이터를 집계, 변환, 필터링하는데 효율적이다.

 

  • ☝ 분할(split) : 데이터를 특정 조건에 의해 분할
  • ✌ 적용(apply) : 데이터를 집계, 변환, 필터링하는데 필요한 메소드 적용
  • 👌 결합(combine) : 2단계의 처리 결과를 하나로 결합

 

📢 그룹 객체 만들기 (분할 단계)

📍 pandas.DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, observed=False, dropna=True)

(참고) https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html?highlight=groupby#pandas.DataFrame.groupby

 

👉 1개 열을 기준으로 그룹화

#class 열을 기준으로 분할
class_group = df.groupby(['class'])

class_group.mea()

 

👉 여러 열을 기준으로 그룹화

# class 열, sex 열을 기준으로 그룹화
class_sex = df.groupby(['class', 'sex'])

for key, group in class_sex:
    print('* key :', key)
    print('* number :', len(group))
    print(group.head())
    print('\n')

 

 

📢 특정 그룹 선택하기

📍 group객체.get_group(name)
class_group.get_group('Third').head()

# 그룹객체에서 개별 그룹 선택하기
class_sex.get_group(('Third', 'male')).head()

 

 

📢 그룹 연산 메소드 ( 적용 - 결합 단계 )

📌 데이터 집계(aggregation)

  • 📒 집계 기능을 내장하고 있는 판다스 기본 함수
    • mean(), max(), min(), sum(), count(), size(), var(), std(), describe(), info(), first(), last() ...
  • 📝 사용자 정의 함수를 그룹 객체에 적용하는 메소드
    • 📍 group객체.agg(func)
      • '모든' 열에 '여러 함수' 매핑 : group객체.agg( ['func1', func2', 'func3', ...] )
      • '각' 열마다 '다른 함수' 매핑 : group객체.agg( { '열1' : '함수1' , '열2' : '함수2', ... }

 

👉 각 그룹에 대해 각 열의 표준편차 계산하기

class_group.std()

 

👉 열을 지정하여 집계 연산 적용하기

class_group['fare'].std()

 

🤜 집계 연산을 처리하는 사용자 정의 함수 적용하기

def min_max(x):
	return x.max() - x.min()
    
class_group.agg(min_max)

 

🤜 여러 함수를 각 열(모든 열)에 동일하게 적용하기

class.group.agg(['min', 'max'])

 

🤜 각 열마다 다른 함수 적용하기

class_group.agg({'fare':'std', 'age':['min','max']})

 

 

📌 그룹 연산 데이터 변환

📍 group객체.transform(func)

transform() 메소드는 그룹별로 구분하여 각 원소에 함수를 적용하나 그룹별 집계 대신 각 원소의 본래 행 인덱스와 열 이름을 기준으로 연산 결과를 반환한다. 즉, 그룹 연산의 결과를 원본 데이터프레임과 같은 형태로 변환하여 정리한다.

 

👉 한 열에 적용하기

# z-score 계산 함수
def z_score(x):
    return (x - x.mean()) / x.std()

# 한 열에 적용
class_group.age.transform(z_score)

 

👉 모든 데이터에 적용하기

class_group.transform(z_score)

 

💡🚨 결론 🔥🔥

agg 메소드는 각 그룹별 데이터에 연산을 위한 함수를 구분해 적용하고, 그룹별로 연산 결과를 집계하여 반환한다.

transform() 메소드는 그룹별로 연산을 위한 함수를 적용하기 하지만, 그룹별로 집계하지 않고 원래 데이터프레임의 형태로 반환한다.

 

 

📌 그룹 객체 필터링

📍 group객체.filter(조건식 함수)

그룹 객체에 filter() 메소드를 적용할 때, 조건식을 가진 함수를 전달하면 참인 그룹만을 남긴다.

 

# age 열의 평균이 30보다 작은 그룹만을 필터링
class_group.filter(lambda x: x.age.mean() < 30)

 

 

📌 그룹 객체에 함수 매핑

📍 group객체.apply(func)

apply() 메소드는 판다스 객체의 개별 원소를 특정 함수에 일대일로 매핑한다.
사용자가 원하는 대부분의 연산을 그룹 객체에도 적용할 수 있다.

 

👉 기존 집계 함수 적용하기

# 집계 : 각 그룹별 요약 통계 정보 집계
class_group.apply(lambda x: x.describe())

 

👉 사용자가 정의한 집계 함수 적용하기

# 사용자 정의 함수 
class_group.age.apply(z_score)

 

👉 필터링 적용하기

# 필터링 : age 열의 데이터 평군이 30보다 작은 그룹만을 선택
class_group.apply(lambda x: x.age.mean() < 30)

for x in age_filter.index:
    if age_filter[x] == True:
        age_filter_df = class_group.get_group(x)
        print(age_filter_df.head(), '\n')

반응형

'👩‍💻 > pandas' 카테고리의 다른 글

4. 머신러닝 데이터 분석(0)  (0) 2021.02.04
3. 데이터프레임 응용(6)  (0) 2021.02.02
3. 데이터프레임 응용(4)  (0) 2021.01.31
3. 데이터프레임 응용(0)  (0) 2021.01.31
3. 데이터프레임 응용(3)  (0) 2021.01.31
Comments