GroupBy (그룹화)
- 기준 열을 바탕으로 데이터를 그룹화
- groupby()
import pandas as pd
# 예시 데이터프레임
df = pd.DataFrame({
'A': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
'B': [10, 20, 30, 40, 50, 60],
'C': [5, 10, 15, 20, 25, 30]
})
# 'A' 열을 기준으로 그룹화
grouped = df.groupby('A')
# 그룹화된 객체 출력
print(grouped)
# 출력
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f7c4a56baf0>
- groupby() 는 그룹화된 객체를 반환하며, 그룹별 연산을 하려면 추가적인 집계 함수가 필요함
그룹화 후 집계 (Aggregation)
- 그룹화 후 집계함수를 사용해 각 그룹에 대해 연산을 수행한다
- 집계함수
- sum() - 합계
- mean() - 평균
- count() - 개수
- max() - 최대
- min() - 최소
# 그룹별 합계 계산
grouped_sum = grouped.sum()
print(grouped_sum)
# 출력
B C
A
X 90 45
Y 120 60
여러 집계 함수 적용 (agg)
- agg()
- 그룹별로 여러개의 집계 함수를 동시에 적용 가능
- 다양한 통계량을 한번에 계산
# 여러 집계 함수 적용
grouped_agg = grouped.agg({
'B': ['sum', 'mean'], # 'B' 열에 대해 합계와 평균 계산
'C': ['max', 'min'] # 'C' 열에 대해 최댓값과 최솟값 계산
})
print(grouped_agg)
# 출력
B C
sum mean max min
A
X 90 30.0 25 5
Y 120 40.0 30 10
- 각 그룹별로 'B' 열의 합계와 평균을, 'C' 열의 최댓값과 최솟값을 계산
조건을 적용한 그룹화
- .filter()
- 커스텀해서 조건을 걸어줄 수 있음
# 'B' 열의 평균이 40 이상인 그룹만 필터링
filtered_group = grouped.filter(lambda x: x['B'].mean() >= 40)
print(filtered_group)
# 출력
A B C
3 Y 40 20
5 Y 60 30
- 'A' 열을 기준으로 그룹화 한 후, 각 그룹의 'B' 열 평균이 40 이상인 그룹만 추출
transform() 을 사용한 변환
- 그룹화된 데이터를 각 그룹 내에서 변환할 때 사용
- 데이터를 그룹별로 변환하지만, 원본 데이터의 크기를 유지
# 'B' 열에 대해 그룹별 평균을 계산하고, 이를 각 원본 값에 적용
df['B_mean'] = grouped['B'].transform('mean')
print(df)
A B C B_mean
0 X 10 5 30.0
1 Y 20 10 40.0
2 X 30 15 30.0
3 Y 40 20 40.0
4 X 50 25 30.0
5 Y 60 30 40.0
- 각 그룹의 'B' 열 평균을 계산하고, 이를 각 행에 변환하여 추가한 결과
apply() 를 사용한 그룹별 함수 적용
- 그룹에 대해 사용자가 정의한 함수를 적용
- 더 복잡한 계산이나 변환이 필요할 때 유용
# 그룹별로 'B' 값의 합과 평균을 계산하는 사용자 정의 함수 적용
grouped_apply = grouped.apply(lambda x: pd.Series({'B_sum': x['B'].sum(), 'B_mean': x['B'].mean()}))
print(grouped_apply)
# 출력
B_sum B_mean
A
X 90 30.0
Y 120 40.0
'Python > Pandas' 카테고리의 다른 글
[Pandas] 결측치 탐지와 처리 (1) | 2024.12.26 |
---|---|
[Pandas] 피벗 테이블 - pivot_table() (4) | 2024.12.16 |
[Pandas] 데이터 병합 - merge(), concat(), join() (1) | 2024.12.16 |
[Pandas] 데이터 정렬 - sort_values(), sort_index(), rank() (0) | 2024.12.16 |
[Pandas] 타입 변환 - astype() (1) | 2024.12.16 |