pivot_table aggfunc 예제
2024. 10. 24. 17:25ㆍdjango/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를 선택하면 됩니다.
'django > Views' 카테고리의 다른 글
django-rest-framework 의 APIView 에서 사용하는 def 에 대해 정의 (3) | 2024.11.11 |
---|---|
href="{% url ' ' %}">Home</a> (0) | 2024.11.01 |
template_name = 을 지정하지 않으면 어떤이름으로 템플렛이 만들어지는가 (0) | 2024.10.24 |
ListView의 전체 실행 순서 (1) | 2024.10.24 |
django return JsonResponse 사용법 (0) | 2024.03.27 |