데이터프레임을 그룹화하고 집계하는 기능은 판다스에서 가장 많이 사용되는 기능 중 하나입니다. 이번에는 판다스 데이터프레임을 그룹화하는 방법에 대해서 알아보도록 하겠습니다.
데이터프레임 그룹화
판다스에서 데이터프레임을 그룹화하는 방법은 groupby() 함수를 사용하는 것입니다. groupby() 함수는 지정한 열(column)을 기준으로 데이터프레임을 그룹화합니다. 이후 집계(aggregation) 함수를 사용하여 각 그룹별로 데이터를 처리할 수 있습니다.
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva', 'Frank'],
'gender': ['F', 'M', 'M', 'M', 'F', 'M'],
'age': [25, 32, 18, 47, 22, 36],
'salary': [50000, 80000, 20000, 120000, 35000, 90000]}
df = pd.DataFrame(data)
이 데이터프레임은 이름(name), 성별(gender), 나이(age), 연봉(salary) 정보를 가지고 있습니다.
grouped = df.groupby('gender')
성별(gender)을 기준으로 그룹화했습니다. groupby('gender')는 데이터프레임을 성별(gender)을 기준으로 그룹화하는 것을 의미합니다. 이후 grouped 변수에 그룹화된 데이터프레임이 저장됩니다.
그룹화된 데이터프레임 정보 확인
그룹화된 데이터프레임 정보를 확인해보겠습니다. groups 속성을 사용하면 그룹화된 데이터프레임의 정보를 확인할 수 있습니다.
print(grouped.groups)
>>>
{'F': [0, 4], 'M': [1, 2, 3, 5]}
성별(gender)이 'F'인 데이터프레임은 0번 인덱스와 4번 인덱스에 위치하고, 성별(gender)이 'M'인 데이터프레임은 1번, 2번, 3번, 5번 인덱스에 위치한다는 것을 의미합니다.
그룹화된 데이터프레임 집계
그룹화된 데이터프레임을 집계하는 방법은 다양한 함수를 사용할 수 있습니다. 집계 함수는 각 그룹별로 데이터를 처리하여 하나의 값을 반환합니다.
집계 함수 종류
- count() : 그룹의 데이터 갯수
- sum() : 그룹의 합
- mean() : 그룹의 평균
- median() : 그룹의 중간값
- min() : 그룹의 최솟값
- max() : 그룹의 최댓값
- std() : 그룹의 표준편차
- var() : 그룹의 분산
- describe() : 그룹의 기초 통계량
그룹화된 데이터프레임의 각 그룹별로 연봉(salary)의 평균과 합을 구해보겠습니다.
mean_salary = grouped['salary'].mean()
sum_salary = grouped['salary'].sum()
print(mean_salary)
print(sum_salary)
>>>
gender
F 42500.0
M 77500.0
Name: salary, dtype: float64
gender
F 85000
M 310000
Name: salary, dtype: int64
위 결과에서 mean_salary는 성별(gender)별 연봉(salary)의 평균을 나타내며, sum_salary는 성별(gender)별 연봉(salary)의 합을 나타냅니다.
여러 개의 열 기준으로 그룹화
여러 개의 열(column)을 기준으로 데이터프레임을 그룹화할 수도 있습니다. 예를 들어, 성별(gender)과 나이(age)를 기준으로 데이터프레임을 그룹화해보겠습니다.
grouped = df.groupby(['gender', 'age'])
mean_salary = grouped['salary'].mean()
print(mean_salary)
>>>
gender age
F 22 35000
25 50000
M 18 20000
32 80000
36 90000
47 120000
Name: salary, dtype: int64
성별(gender)과 나이(age)를 기준으로 연봉(salary)의 평균을 구했습니다.
그룹화된 데이터프레임 반복 처리
그룹화된 데이터프레임을 반복 처리하는 방법은 groupby() 함수와 for 문을 사용하는 것입니다. groupby() 함수를 사용하여 그룹화된 데이터프레임을 생성한 뒤, for 문을 사용하여 각 그룹을 반복 처리합니다. 예를 들어, 성별(gender)을 기준으로 데이터프레임을 그룹화하고, 각 그룹별로 이름(name)을 출력해보겠습니다.
grouped = df.groupby('gender')
for gender, group in grouped:
print(gender)
print(group['name'])
>>>
F
0 Alice
4 Eva
Name: name, dtype: object
M
1 Bob
2 Charlie
3 David
5 Frank
Name: name, dtype: object
groupby() 함수로 성별(gender)을 기준으로 그룹화한 후, for 문으로 각 그룹을 반복 처리한 결과입니다. grouped 변수에는 성별(gender)을 기준으로 그룹화된 데이터프레임이 저장되어 있으며, for 문에서 gender 변수에는 그룹의 기준값이, group 변수에는 해당 그룹의 데이터프레임이 저장됩니다.
그룹화된 데이터프레임의 연산
그룹화된 데이터프레임을 연산하는 방법은 agg() 함수를 사용하는 것입니다. agg() 함수는 각 그룹별로 특정한 연산을 수행하고, 그 결과를 데이터프레임으로 반환합니다.
grouped = df.groupby('gender')
result = grouped['salary'].agg([np.min, np.max, np.mean])
result.columns = ['min_salary', 'max_salary', 'mean_salary']
print(result)
>>>
min_salary max_salary mean_salary
gender
F 35000 50000 42500.0
M 20000 120000 77500.0
groupby() 함수로 성별(gender)을 기준으로 그룹화한 후, agg() 함수로 각 그룹별로 연봉(salary)의 최소값, 최대값, 평균값을 구한 것입니다. agg() 함수의 인자로는 np.min, np.max, np.mean 등의 함수를 사용할 수 있으며, result 변수에는 결과가 저장되어 있습니다.
결론
이상으로 판다스(Pandas) 데이터프레임의 그룹화에 대해 알아보았습니다. 판다스의 groupby() 함수를 사용하여 데이터프레임을 그룹화할 수 있으며, for 문을 사용하여 각 그룹을 반복 처리할 수 있습니다. 그룹화된 데이터프레임은 이전시간에 배웠던 concat() 함수를 사용하여 병합할 수 있으며, agg() 함수를 사용하여 각 그룹별로 연산을 수행할 수 있습니다. 이를 통해 판다스를 더욱 효율적으로 사용할 수 있습니다.
'pandas' 카테고리의 다른 글
다양한 그래프 유형으로 살펴보는 데이터 시각화! (0) | 2023.03.23 |
---|---|
내림차순, 오름차순, 다중조건까지! 판다스로 데이터 정렬하기 (0) | 2023.03.23 |
판다스(Pandas)로 피벗테이블(Pivot Table) 만들기: 데이터 분석의 필수 도구! (0) | 2023.03.22 |
Pandas merge, join, concat의 차이와 활용 예시 (0) | 2023.03.21 |
데이터 전처리에서 가장 중요한! 판다스(Pandas)의 데이터 타입 변경 방법 (0) | 2023.03.21 |
댓글