pivot_table aggfunc 예제

2024. 10. 24. 17:25django/Views

import pandas as pd
import numpy as np

# 예제를 위한 타이타닉 데이터 로드
df = pd.DataFrame({
    'Pclass': [1, 1, 2, 2, 3, 3],
    'Survived': [0, 1, 0, 1, 0, 1],
    'Age': [25, 30, 35, 40, 45, 50],
    'Fare': [100, 150, 50, 75, 25, 30]
})

# 1. 기본 집계 함수들
"""
주요 aggfunc 옵션:
- 'size': 개수 세기
- 'count': 비결측치 개수
- 'sum': 합계
- 'mean': 평균
- 'median': 중앙값
- 'min': 최소값
- 'max': 최대값
- 'std': 표준편차
- 'var': 분산
"""

# size vs count 비교
pv_size = df.pivot_table(
    index='Pclass',
    columns='Survived',
    aggfunc='size'  # 단순히 해당 조합의 개수를 셈
)
print("\n=== size로 집계 ===")
print(pv_size)

pv_count = df.pivot_table(
    index='Pclass',
    columns='Survived',
    values='Age',  # count는 특정 컬럼을 지정해야 함
    aggfunc='count'  # 비결측치의 개수를 셈
)
print("\n=== count로 집계 ===")
print(pv_count)

# 2. 여러 집계 함수 동시 사용
pv_multi = df.pivot_table(
    index='Pclass',
    columns='Survived',
    values=['Age', 'Fare'],
    aggfunc={
        'Age': ['mean', 'std'],  # Age 컬럼에는 평균과 표준편차
        'Fare': ['sum', 'mean']  # Fare 컬럼에는 합계와 평균
    }
)
print("\n=== 여러 함수로 집계 ===")
print(pv_multi)

# 3. 사용자 정의 집계 함수
def custom_agg(x):
    """상위 25% 평균 계산"""
    return x.quantile(0.75)

pv_custom = df.pivot_table(
    index='Pclass',
    columns='Survived',
    values='Fare',
    aggfunc=custom_agg
)
print("\n=== 사용자 정의 함수로 집계 ===")
print(pv_custom)

# 4. 람다 함수 사용
pv_lambda = df.pivot_table(
    index='Pclass',
    columns='Survived',
    values='Age',
    aggfunc=lambda x: x.max() - x.min()  # 범위 계산
)
print("\n=== 람다 함수로 집계 ===")
print(pv_lambda)

# 5. 여러 함수를 리스트로 전달
pv_list = df.pivot_table(
    index='Pclass',
    columns='Survived',
    values='Fare',
    aggfunc=['mean', 'sum', 'count', custom_agg]
)
print("\n=== 함수 리스트로 집계 ===")
print(pv_list)

 

 

pandas의 pivot_table에서 `aggfunc`는 집계 함수를 지정하는 매우 중요한 파라미터입니다. 다양한 집계 함수를 사용할 수 있습니다.



```python
import pandas as pd
import numpy as np

# 예제를 위한 타이타닉 데이터 로드
df = pd.DataFrame({
    'Pclass': [1, 1, 2, 2, 3, 3],
    'Survived': [0, 1, 0, 1, 0, 1],
    'Age': [25, 30, 35, 40, 45, 50],
    'Fare': [100, 150, 50, 75, 25, 30]
})

# 1. 기본 집계 함수들
"""
주요 aggfunc 옵션:
- 'size': 개수 세기
- 'count': 비결측치 개수
- 'sum': 합계
- 'mean': 평균
- 'median': 중앙값
- 'min': 최소값
- 'max': 최대값
- 'std': 표준편차
- 'var': 분산
"""

# size vs count 비교
pv_size = df.pivot_table(
    index='Pclass',
    columns='Survived',
    aggfunc='size'  # 단순히 해당 조합의 개수를 셈
)
print("\n=== size로 집계 ===")
print(pv_size)

pv_count = df.pivot_table(
    index='Pclass',
    columns='Survived',
    values='Age',  # count는 특정 컬럼을 지정해야 함
    aggfunc='count'  # 비결측치의 개수를 셈
)
print("\n=== count로 집계 ===")
print(pv_count)

# 2. 여러 집계 함수 동시 사용
pv_multi = df.pivot_table(
    index='Pclass',
    columns='Survived',
    values=['Age', 'Fare'],
    aggfunc={
        'Age': ['mean', 'std'],  # Age 컬럼에는 평균과 표준편차
        'Fare': ['sum', 'mean']  # Fare 컬럼에는 합계와 평균
    }
)
print("\n=== 여러 함수로 집계 ===")
print(pv_multi)

# 3. 사용자 정의 집계 함수
def custom_agg(x):
    """상위 25% 평균 계산"""
    return x.quantile(0.75)

pv_custom = df.pivot_table(
    index='Pclass',
    columns='Survived',
    values='Fare',
    aggfunc=custom_agg
)
print("\n=== 사용자 정의 함수로 집계 ===")
print(pv_custom)

# 4. 람다 함수 사용
pv_lambda = df.pivot_table(
    index='Pclass',
    columns='Survived',
    values='Age',
    aggfunc=lambda x: x.max() - x.min()  # 범위 계산
)
print("\n=== 람다 함수로 집계 ===")
print(pv_lambda)

# 5. 여러 함수를 리스트로 전달
pv_list = df.pivot_table(
    index='Pclass',
    columns='Survived',
    values='Fare',
    aggfunc=['mean', 'sum', 'count', custom_agg]
)
print("\n=== 함수 리스트로 집계 ===")
print(pv_list)

```

`aggfunc` 주요 특징과 옵션:

1. 기본 제공 문자열 함수:
```python
# 가장 자주 사용되는 기본 함수들
basic_funcs = [
    'size',    # 개수 (결측치 포함)
    'count',   # 개수 (결측치 제외)
    'sum',     # 합계
    'mean',    # 평균
    'median',  # 중앙값
    'min',     # 최소값
    'max',     # 최대값
    'std',     # 표준편차
    'var'      # 분산
]
```

2. 복잡한 집계 예제:
```python
# 여러 컬럼에 다른 집계 함수 적용
df.pivot_table(
    index='Pclass',
    columns='Survived',
    values=['Age', 'Fare'],
    aggfunc={
        'Age': 'mean',      # Age는 평균
        'Fare': ['sum', 'mean']  # Fare는 합계와 평균
    }
)
```

3. 사용자 정의 함수 사용:
```python
# 커스텀 집계 함수
def custom_metric(x):
    return x.mean() + x.std()

df.pivot_table(
    index='Pclass',
    columns='Survived',
    values='Fare',
    aggfunc=custom_metric
)
```

4. 주의사항:
- 'size'는 values 인자가 필요 없음
- 'count'와 다른 함수들은 values 지정 필요
- 결측치 처리 방식이 함수마다 다름
- 복잡한 집계는 성능에 영향을 줄 수 있음

5. 실제 분석 예시:
```python
# 등급별, 생존여부별 다양한 통계
stats = df.pivot_table(
    index='Pclass',
    columns='Survived',
    values=['Age', 'Fare'],
    aggfunc={
        'Age': ['mean', 'median', 'count'],
        'Fare': ['mean', 'sum', lambda x: x.max() - x.min()]
    }
)
```

이러한 옵션들을 활용하면 데이터를 다양한 관점에서 분석할 수 있습니다. 필요한 분석 방법에 따라 적절한 aggfunc를 선택하면 됩니다.