👩‍💻/pandas

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

글로랴 2021. 2. 2. 23:06

6️⃣ MultiIndex, 멀티 인덱스

판다스는 행 인덱스를 여러 레벨로 구현할 수 있도록 멀티 인덱스 클래스를 지원한다.

📍 pandas.DataFrame.xs(key, axis=0, level=None, drop_level=True)

- key : label or tuple of label
- axis 0 or 'index', 1 or 'columns'
- level : key가 포함된 위치 또는 label
# sex 값이 male인 행 선택
avg.xs('male', level='sex')

 

 

 

7️⃣ Pivot, 피벗

판다스 pivot_table() 함수는 엑셀에서 사용하는 피벗테이블과 비슷한 기능을 처리한다.

📍 pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False)

피벗테이블을 구성하는 4가지 요소(행 인덱스, 열 인덱스, 데이터 값, 데이터 집계 함수)에 적용할 데이터프레임의 열을 각각 지정하여 함수의 인자로 전달한다.

 

 

👉 집계에 사용할 열을 1개씩 지정해보기

pdf1 = pd.pivot_table(df,              # 피벗할 데이터프레임
                     index='class',    # 행 위치에 들어갈 열
                     columns='sex',    # 열 위치에 들어갈 열
                     values='age',     # 데이터로 사용할 열
                     aggfunc='mean')   # 데이터 집계 함수

pdf1

 

👉 집계에 사용할 열을 2개 이상 지정해보기

pdf1_2 = pd.pivot_table(df,              # 피벗할 데이터프레임
                     index=['class', 'sex'],    # 행 위치에 들어갈 열
                     columns='survived',    # 열 위치에 들어갈 열
                     values=['age', 'fare'],     # 데이터로 사용할 열
                     aggfunc='mean')   # 데이터 집계 함수

pdf1_2

 

👉 집계 함수를 2개 이상 지정해보기

pdf2 = pd.pivot_table(df,              # 피벗할 데이터프레임
                     index='class',    # 행 위치에 들어갈 열
                     columns='sex',    # 열 위치에 들어갈 열
                     values='age',     # 데이터로 사용할 열
                     aggfunc=['mean', 'sum'])   # 데이터 집계 함수

pdf2

 

👉 집계에 사용할 열과 집계함수를 2개 이상 지정해보기

pdf2_2 = pd.pivot_table(df,              # 피벗할 데이터프레임
                     index=['class', 'sex'],    # 행 위치에 들어갈 열
                     columns='survived',    # 열 위치에 들어갈 열
                     values=['age', 'fare'],     # 데이터로 사용할 열
                     aggfunc=['mean', 'sum'])   # 데이터 집계 함수

pdf2_2

 

🤜 피벗테이블 '행'을 선택해보자 🔥

pdf2_2.xs('First')

 

pdf2_2.xs( ('First', 'female') )

 

# 행 인덱스 레벨을 직접 지정
pdf2_2.xs('male', level='sex')

 

# 아래 세 코드는 모두 같은 결과를 보여준다.
pdf2_2.xs( ('Second', 'male'), level=[0, 1])
pdf2_2.xs( ('Second', 'male'), level=['class', 'sex'])
pdf2_2.xs( ('Second', 'male'), level=[0, 'sex'])

 

 

🤜 피벗테이블 '열'을 선택해보자 🔥

pdf2_2.xs('mean', axis=1)

 

pdf2_2.xs( ('mean', 'age'), axis=1 )

 

pdf2_2.xs(1, level='survived', axis=1)

 

pdf2_2.xs( ('sum', 'fare', 0), level=[0, 1, 2], axis=1 )

반응형