새소식

데이터분석/다섯째주

파이썬 Python : Pivot Table

  • -
728x90

목차

     

     

    Pivot Table

    데이터를 원하는 형태로 집계할 때 유용하게 사용할 수 있는 방법

    데이터를 재정렬

    https://pandas.pydata.org/docs/reference/api/pandas.pivot_table.html

     

    pandas.pivot_table( 데이터,  index=[' 컬럼명 '],  columns=[' 컬럼명 ']   
                         , values=[' 컬럼명 '],  aggfunc=' 집계함수 ')   

    pandas.pivot_table( 데이터,  index=[' 컬럼명 '],  columns=[' 컬럼명 ']   
                         , values=[' 컬럼명 '],  aggfunc=' 집계함수 '   
                         , fill_value=None  
                         , margins=False  
                         , dropna=True  
                         , margins_name='All'  
                         , observed=False  
                         , sort=True)   

     

    • index   =  각 행(row)는 무엇으로 정의할지
    • columns   =  각 열(column)은 무엇으로 정의할지
    • values   각 Cell을 어떤 숫자로 계산할지
    • aggfunc   집계함수, 계산을 어떻게 할지, 하나를 사용할수도 여러개 사용할 수도 있음.(리스트 또는 딕셔너리로...)
      * 평균 :  (기본값) aggfunc = np.mean()
      * 합계 :  aggfunc = np.sum()
      * 표준편차 :  aggfunc = 'std'
      * count :  aggfunc = 'count'
      * 길이
        :  aggfunc = 'len'
      * 고유값 count :  aggfunc = 'nunique'
      * 최대값 :  aggfunc = np.max()  또는  'max'
      * 최소값 :  aggfunc = np.min()  또는  'min'
    • fill_value   =  기본값 None, 집계후 결과 피벗테이블에서 NaN 값을 대체할 값
    • margins   기본값  False, 맨아래 하단에 총계(All) 추가
    • dropna   기본값  True, 항목이 모두 NaN인 열은 포함하지 않고 생략한다.
    • margins_name   기본값  'All'
    • observed   기본값  False, 범주형인 경우에만 적용됨, Ture-관찰된 값만 표시, False-모든 값 표시
    • sort   기본값  True, 결과값을 정렬해야하는지 여부

    import pandas as pd
    
    df = pd.read_excel('경로~.xlsx')
    df.head()

    -- 출력 --

     

     

    index 를 설정하여 데이터 재정렬

    p_df1 = pd.pivot_table(df, index='Name')
    
    # 위와 동일한 결과가 나옴
    # p_df1 = df.pivot_table(index='Name')
    
    print(p_df1)

    -- 출력 --

     

    p_df2 = df.pivot_table(index=['Name', 'Rep', 'Manager'])
    print(p_df2)

    -- 출력 --

     

     

    values 로 집계될 데이터 지정

    # 숫자형 컬럼들중에서 원하는 컬럼만 표시하고 싶다면, values로 지정하면 된다.
    
    p_df3 = df.pivot_table(index=['Manager', 'Rep'], values='Price')
    print(p_df3)

    -- 출력 --

     

     

    aggfunc 로 values에 적용할 집계함수 설정 (기본값: 평균)

    p_df4 = df.pivot_table(index=['Manager', 'Rep'], values='Price', aggfunc=np.sum)
    print(p_df4)

    -- 출력 --

     

    p_df5 = df.pivot_table(index=['Manager', 'Rep'], values='Price', aggfunc=[np.sum, len])
    print(p_df5)

    -- 출력 --

     

     

    columns 로 분류 지정

    p_df6 = df.pivot_table(index=['Manager', 'Rep'], values='Price', columns='Product', aggfunc=np.sum)
    print(p_df6)

    -- 출력 --

     

     

    fill_value 로 NaN의 대체값 지정

    p_df7 = df.pivot_table(index=['Manager', 'Rep'], values='Price', 
    			columns='Product', aggfunc=np.sum, fill_value=0)
    print(p_df7)

    -- 출력 --

     

    p_df8 = df.pivot_table(index=['Manager', 'Rep','Product'], values=['Price', 'Quantity'],  
    			aggfunc=np.sum, fill_value=0)
    print(p_df8)

    -- 출력 --

     

     

    margins 를 True 설정하면, 총계 행(ALL) 추가

    p_df9 = df.pivot_table(
    			index=['Manager', 'Rep','Product'], 
    			values=['Price', 'Quantity'],  
    			aggfunc=[np.sum, np.mean], 
    			fill_value=0,
    			margins=True) #총계 추가
    print(p_df9)

    -- 출력 --

     

     

     

     

    Query문을 활용한 Pivot Table

    Query문 : 원하는 조건의 데이터만 가져오는 명령어

     데이터프레임변수명.query(' 컬럼명 == 조건문  ').pivot_table( )   

     

     

     

     

     

     

    반응형
    Contents

    포스팅 주소를 복사했습니다

    이 글이 도움이 되었다면 공감 부탁드립니다.