두 가지 이상의 범주로 groupby를 실행한 경우, 자동으로 멀티인덱스가 적용
각 행이 나누어져 있고, 인덱스가 초기화된 결과를 얻으려면 어떻게 해야 할까?
df = df.reset_index()
판다스 내 reset_index() 함수를 사용하면 행이 분리된 데이터프레임의 결과를 살펴볼 수 있음
df = df.reset_index(level = 'Survived')
level 인자로 지정한 반대의 column이 index로 지정된 것에 주의할 것
df = df.reset_index()
처럼이 아니라 inplace = True 기능을 이용해 df.reset_index(inplace = True)
처럼 변수 재선언 과정 없이 결과 반영이 가능하게 만들 수도 있음
index
는 기준점이 되는 변수를 의미하며, 보통 문자열 변수를 작성한다.
values
는 계산하려는 변수를 의미하며, 보통 숫자열 변수를 작성한다.
table1 = pd.pivot_table(df, values='국어', index=['반'],
columns=['전공'], aggfunc=np.mean)
table1
table2 = pd.pivot_table(df, values=['국어', '수학'], index=['반'],
columns=['전공'], aggfunc=np.mean)
table2
table3 = pd.pivot_table(df, values=['국어', '수학'], index=['반', '성별'],
columns=['전공'], aggfunc=np.mean)
table3
table4 = pd.pivot_table(df, values=['국어', '수학'], index=['반'],
columns=['전공', '성별'], aggfunc=np.mean)
table4
fill_value
인자table5 = pd.pivot_table(df, values=['국어', '수학'], index=['반'],
columns=['전공', '성별'], aggfunc=np.mean, fill_value = 0)
table5
aggfunc
인자 여러 개 지정table6 = pd.pivot_table(df, values=['국어', '수학'], index=['반', '성별'],
columns=['전공'], aggfunc=[np.mean, np.std])
table6
table.loc[(2, '남'), ('mean', '국어', '문과')] # 92.5
table.loc[2, 'mean']
# 부분 테이블 내 부분 테이블 필터링
table.loc[2, 'mean'].loc['남', '국어'] # 성별, 전공 정보 모두 지정
'''
전공
문과 92.5
이과 NaN
Name: 남, dtype: float64'''
table.loc[2, 'mean'].loc[:, '국어'] # 전공 정보만 지정
'''
전공 문과 이과
성별
남 92.5 NaN
여 95.0 90.0'''
table.loc[2, 'mean'].loc['여'] # 성별 정보만 지정
'''
전공
국어 문과 95.0
이과 90.0
수학 문과 88.0
이과 100.0
Name: 여, dtype: float64'''
# 부분 테이블 내 값 추출
table.loc[2, 'mean'].loc['여', ('국어', '문과')] # 95.0
table.sort_values(('mean', '수학', '문과'))
table.sort_values(('mean', '수학', '문과'), ascending = False)
table.columns = ['/'.join(col) for col in table.columns]
table
table = table.reset_index()
table
추가로 읽어보면 좋을 글
pandas pivot table