✳️ groupby( )
- Group by 함수는 데이터프레임을 그룹화
- 그룹 단위로 데이터를 분할(split), 적용(apply), 결합(combine)하는 기능을 제공
- 데이터프레임을 특정 기준에 따라 그룹으로 나누어 집계, 변환, 필터링 등 가능
- 그룹 생성 : 기준 열(혹은 열들)을 지정하여 데이터프레임을 그룹으로 나눔
- 그룹에 대한 연산 수행 : 그룹 단위로 원하는 연산(평균, 합, 개수 등)을 수행
- 결과 결합 : 각 그룹의 연산 결과를 하나의 데이터프레임으로 결합하여 새로운 데이터프레임을 생성
df = pd.DataFrame({
'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
'Value': [1, 2, 3, 4, 5, 6]
})
df
예시)
df.groupby('Category')
# <pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002527B32CA70>
결과에 뜨는 영어는 groupby해서 이제 드릉드릉 작업할 준비가 되었다는 그런 맥락이라고 하셨다.
- 기본 사용
# 그룹화한 컬럼의 값 평균 구하기
df.groupby('Category').mean()
# 그룹화한 컬럼의 값 합계 구하기
df.groupby('Category').sum()
# 그룹화한 컬럼의 값 개수 구하기
df.groupby('Category').count()
# 그룹화한 컬럼의 최댓값 구하기
df.groupby('Category').max()
# 그룹화한 컬럼의 최솟값 구하기
df.groupby('Category').min()
# 그룹화된 컬럼의 값을 리스트로 형성하기
df.groupby('Category').agg(list)
- 복수의 열 기준으로 사용하기
data = {
'Category': ['A', 'A', 'B', 'B', 'A', 'B'],
'SubCategory': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
'Value': [1, 2, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
df
여러 개의 컬럼을 그룹화하여 집계 함수를 이용해 계산을 할 수 있다.
df.groupby(['Category', 'SubCategory']).sum()
- 다양한 집계 함수 사용하기
data = {
'Category': ['A', 'A', 'B', 'B', 'A', 'B'],
'SubCategory': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
'Value1': [1, 2, 3, 4, 5, 6],
'Value2': [10, 20, 30, 40, 50, 60]
}
df = pd.DataFrame(data)
df
원하는 컬럼별로 그룹화시킨 뒤,
.agg를 사용해서 Value1 값들에는 평균과 합계를, Value2 값들에는 합계를 연산할 수 있다.
df.groupby(['Category', 'SubCategory']).agg({'Value1': ['mean', 'sum'], 'Value2': 'sum'})
✳️ Pivot Table( )
- pivot_table() 함수는 데이터프레임에서 피봇 테이블을 생성하는 데 사용
# Pivot Table란? 데이터를 재구성하여 요약, 집계된 정보를 보여주는 테이블 형태 - 주어진 데이터를 사용자가 원하는 형태로 재배치하여 요약된 정보를 보기 쉽게 제공
예시)
df = pd.DataFrame({
'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-01'],
'Category': ['A', 'B', 'A', 'B', 'A'],
'Value': [10, 20, 30, 40, 50]
})
df
예시 데이터프레임을 이용하여 Date는 인덱스로, Category는 컬럼으로 하는 피봇테이블을 제작해보면 다음과 같이 만들 수 있다.
pivot = df.pivot_table(index='Date', columns='Category', values='Value', aggfunc='sum')
pivot
df = pd.DataFrame({
'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-01'],
'Category': ['A', 'B', 'A', 'B', 'A'],
'SubCategory': ['X', 'X', 'Y', 'Y', 'X'],
'Value': [10, 20, 30, 40, 50]
})
df
컬럼을 여러개로 하여 제작할 수도 있다.
pivot = df.pivot_table(index='Date', columns=['Category', 'SubCategory'], values='Value', aggfunc='sum')
pivot
'📒 Today I Learn > 🐼 Pandas' 카테고리의 다른 글
[Pandas] 데이터 정렬과 pickle (0) | 2024.07.23 |
---|---|
[Pandas] 데이터 병합 (0) | 2024.07.23 |
[Pandas] 데이터 추가하기 (0) | 2024.07.23 |
[Pandas] Boolean indexing (0) | 2024.07.23 |
[Pandas] 데이터 선택 (0) | 2024.07.23 |