Post

Pandas groupby와 pivot_table - 그룹화와 피벗테이블

Pandas groupby와 pivot_table - 그룹화와 피벗테이블

Pandas groupby와 pivot_table - 그룹화와 피벗테이블

apply() - 함수적용

  • apply()는 데이터 전처리시 굉장히 많이 활용하는 기능
  • 좀 더 복잡한 logic을 컬럼 혹은 DataFrame에 적용하고자 할 때 사용

함수(Function) 정의

  • who 컬럼을 man은 남자, woman은 여자, child는 아이로 변경하고자 apply 활용하여 해결
    1
    2
    3
    4
    5
    6
    7
    
    def transform_who(x):
      if x == 'man':
          return '남자'
      elif x == 'woman':
          return '여자'
      else:
          return '아이'
    
    1
    
    df['who'].apply(transform_who)
    
  • 컬럼끼리 함수사용하여 계산
    1
    2
    
    def transform_who(x):
      return x['fare'] / x['age']
    
    1
    
    df.apply(transform_who, axis=1)
    

apply() - lambda 함수

  • 간단한 logic은 함수를 굳이 정의하지 않고, lambda 함수로 쉽게 해결할 수 있습니다.
  • 0:사망, 1:생존으로 변경
  • lambda ver
    1
    
    df['survived'].apply(lambda x: '생존' if x == 1 else '사망')
    
  • function Ver
    1
    2
    3
    4
    5
    6
    
    def survived(x):
      if x == 0:
          return '사망'
      else:
          return '생존'
    df['survived'].apply(survived)
    

    groupby() - 그룹

  • 데이터를 특정 기준으로 그룹핑할 때 활용
  • groupby()를 사용할 때는 반드시 aggregate하는 통계함수와 일반적으로 같이 적용함.
  • 타이타닉 호의 생존자와 사망자를 성별 기준으로 그룹핑하여 평균내기 df.groupby('sex')['survived'].mean()

2개 이상의 컬럼으로 그룹

  • 2개 이상의 컬럼으로 그룹핑할 때도 list로 묶어서 지정
  • 성별, 좌석등급 별 통계 df.groupby(['sex', 'pclass'])['survived'].mean()
  • 예쁘게 출력하려면 pd.DataFrame()으로 감싸주거나, survived 컬럼을 []로 한 번 더 감싸주면 됨. pd.DataFrame(df.groupby(['sex', 'pclass'])['survived'].mean()) df.groupby(['sex', 'pclass'])[['survived']].mean()

reset_index() : 인덱스 초기화

  • reset_index() : 그룹핑된 데이터프레임의 index를 초기화하여 새로운 데이터프레임을 생성 df.groupby(['sex', 'pclass'])['survived'].mean().reset_index()

다중 컬럼에 대한 결과 도출

df.groupby(['sex', 'pclass'])[['survived', 'age']].mean()

다중 통계 함수 적용

df.groupby(['sex', 'pclass'])[['survived', 'age']].agg(['mean', 'sum'])

numpy의 통계 함수도 적용 가능

df.groupby(['sex', 'pclass'])[['survived', 'age']].agg([np.mean, np.sum])

pivot_table()

  • 피벗테이블은 groupby()와도 동작이 유사
  • 기본 동작 원리는 index, columns, values를 지정하여 피벗한다.

    1개 그룹에 대한 단일 컬럼 결과

  • index에 그룹을 표기 df.pivot_table(index='who', values='survived')
  • columns에 그룹을 표기 df.pivot_table(columns='who', values='survived')

다중 그룹에 대한 단일 컬럼 결과

df.pivot_table(index=['who', 'pclass'], values='survived')

index에 컬럼을 중첩하지 않고 행과 열로 펼친 결과

df.pivot_table(index='who', columns='pclass', values='survived')

다중 통계함수 적용

df.pivot_table(index='who', columns='pclass', values='survived', aggfunc=['sum', 'mean'])

This post is licensed under CC BY 4.0 by the author.