피벗테이블은 crosstab이랑은 다르게, 엑셀 피벗테이블처 값 영역에 변수를 별도로 넣어서 계산을 할 수 있음
#index 행, columns 열, values 값에 넣을 열, aggfunc 집계함수
pd.pivot_table(df, index='Sex', columns='Pclass', values='Survived', aggfunc='mean')

#crosstab처럼 margins 가능
pd.pivot_table(df, index='Sex', columns='Survived', values='Age', aggfunc='mean', margins=True)
#aggfunction에 여러개
pd.pivot_table(df, index='Sex', columns='Survived', values='Age', aggfunc=['max','min','mean'])
#다중인덱스, 다중컬럼, 다중 값
pd.pivot_table(df, index=['Sex','Pclass'], columns=['Survived','Embarked'], values=['Age','Fare'], aggfunc='mean')

lambda로 인덱싱
# 가장 나이가 많은 사람 이름 추출하는 함수
x = df['Age']
df.loc[x.idxmax(), 'Name']
df_ex1.pivot_table('Age', index='Pclass', columns='Sex',
aggfunc=lambda x: df_ex1.loc[x.idxmax(), 'Name'])
최고령자의 나이를 가진 행의 인덱스를 뽑아서, 그 인덱스로 인덱싱해서 이름 찾기.

+)추가 예시
# 15세 이하의 인원수를 lambda 함수로도 파악할 수 있다
df_ex3.pivot_table('Age', index='Pclass', columns='Sex',
aggfunc=lambda x: (x <= 15).sum())
# 15세 이하의 비율
df_ex3.pivot_table('Age', index='Pclass', aggfunc=lambda x: (x <= 15).mean())
pivot
df.pivot(index=None, columns = None, values=None)
이 함수는 aggfunc 안쓰고,

처럼, 공통된 값이 없고, 하나씩 배정될때에, 값을 그냥 뽑아와서 테이블을 만들고 싶은 경우에 쓴다.
'Python_Wiki > Python_Library' 카테고리의 다른 글
| Seaborn 스타일 설정 (2) | 2025.07.14 |
|---|---|
| pandas: stack, unstack, melt (데이터 구조 변경) (1) | 2025.07.14 |
| pandas: crosstab / 범주형 데이터 비교 분석 (0) | 2025.07.14 |
| pandas - 데이터 결합: join(파이썬) / merge / concat (1) | 2025.07.14 |
| Pandas 고급함수: apply, map (0) | 2025.07.14 |