Pandas 데이터 분석: 그룹화(Groupby)와 데이터 병합(Merge)
그룹화(Groupby)와 데이터 병합(Merge)의 핵심 기능
Pandas는 데이터를 효율적으로 분석하고 조작하기 위한 그룹화(groupby)와 데이터 병합(merge) 기능을 제공합니다. 그룹화는 데이터를 특정 기준으로 묶어 요약 통계를 계산할 때 유용하며, 데이터 병합은 여러 데이터프레임을 하나로 결합할 때 사용됩니다. 이번 글에서는 이 두 가지 핵심 기능을 살펴보겠습니다.
1. 그룹화(Groupby)
그룹화는 데이터를 특정 기준으로 묶어 집계나 변환을 수행하는 데 사용됩니다.
1) 기본 사용법
groupby()
메서드는 데이터를 기준 값에 따라 그룹으로 묶어줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd
# 데이터프레임 생성
data = {
"Department": ["HR", "IT", "IT", "HR", "Finance", "IT"],
"Employee": ["Alice", "Bob", "Charlie", "David", "Eve", "Frank"],
"Salary": [5000, 6000, 7000, 5500, 8000, 6500]
}
df = pd.DataFrame(data)
# Department 기준으로 그룹화
grouped = df.groupby("Department")
print(grouped)
# 출력: <pandas.core.groupby.generic.DataFrameGroupBy object>
2) 그룹화 후 집계
1. 기본 집계 함수
1
2
3
4
5
6
7
8
9
# Salary 합계 계산
salary_sum = grouped["Salary"].sum()
print(salary_sum)
# 출력:
# Department
# Finance 8000
# HR 10500
# IT 19500
# Name: Salary, dtype: int64
2. 여러 집계 함수 적용
1
2
3
4
5
6
7
8
9
# Salary 합계와 평균 계산
salary_stats = grouped["Salary"].agg(["sum", "mean"])
print(salary_stats)
# 출력:
# sum mean
# Department
# Finance 8000 8000.0
# HR 10500 5250.0
# IT 19500 6500.0
3) 그룹화와 필터링
1. 그룹 기준 필터링
1
2
3
4
5
6
7
8
# Salary 합계가 10,000 이상인 그룹만 선택
filtered = grouped.filter(lambda x: x["Salary"].sum() > 10000)
print(filtered)
# 출력:
# Department Employee Salary
# 1 IT Bob 6000
# 2 IT Charlie 7000
# 5 IT Frank 6500
2. 그룹 내 변환
1
2
3
# 각 그룹 내 Salary의 평균에서 차이 계산
df["Salary_diff"] = grouped["Salary"].transform(lambda x: x - x.mean())
print(df)
2. 데이터 병합(Merge)
데이터 병합은 SQL의 JOIN과 유사한 방식으로, 여러 데이터프레임을 하나로 결합합니다.
1) 기본 사용법
merge()
메서드를 사용하여 데이터프레임을 병합합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 데이터프레임 생성
df1 = pd.DataFrame({
"ID": [1, 2, 3],
"Name": ["Alice", "Bob", "Charlie"]
})
df2 = pd.DataFrame({
"ID": [1, 2, 4],
"Salary": [5000, 6000, 7000]
})
# 두 데이터프레임 병합
merged = pd.merge(df1, df2, on="ID")
print(merged)
# 출력:
# ID Name Salary
# 0 1 Alice 5000
# 1 2 Bob 6000
2) 병합 방식
1. Inner Join
- 기본 병합 방식으로, 공통 키 값이 있는 행만 결합됩니다.
1
2
# Inner Join
merged = pd.merge(df1, df2, on="ID", how="inner")
2. Left Join
- 왼쪽 데이터프레임의 모든 데이터를 유지하고, 오른쪽 데이터프레임의 일치하는 데이터를 추가합니다.
1
2
# Left Join
merged = pd.merge(df1, df2, on="ID", how="left")
3. Right Join
- 오른쪽 데이터프레임의 모든 데이터를 유지하고, 왼쪽 데이터프레임의 일치하는 데이터를 추가합니다.
1
2
# Right Join
merged = pd.merge(df1, df2, on="ID", how="right")
4. Outer Join
- 두 데이터프레임의 모든 데이터를 유지하며, 일치하지 않는 값은 결측치로 표시됩니다.
1
2
# Outer Join
merged = pd.merge(df1, df2, on="ID", how="outer")
3) 여러 키를 사용한 병합
예제
1
2
3
4
5
6
7
8
9
10
11
12
13
df1 = pd.DataFrame({
"ID": [1, 2, 3],
"Dept": ["HR", "IT", "Finance"]
})
df2 = pd.DataFrame({
"ID": [1, 2, 3],
"Dept": ["HR", "IT", "Finance"],
"Salary": [5000, 6000, 7000]
})
merged = pd.merge(df1, df2, on=["ID", "Dept"])
print(merged)
4) 데이터 연결(Concatenate)
concat()
함수는 데이터프레임을 행이나 열 방향으로 연결합니다.
1
2
3
4
5
# 행 방향 연결
df_concat = pd.concat([df1, df2], axis=0)
# 열 방향 연결
df_concat = pd.concat([df1, df2], axis=1)
정리
- 그룹화(Groupby)는 데이터를 특정 기준으로 묶어 요약 통계를 계산하거나 변환할 때 유용합니다.
- 데이터 병합(Merge)은 여러 데이터프레임을 결합하여 통합된 데이터를 생성하는 데 사용됩니다.
- 다양한 병합 방식(Inner, Left, Right, Outer)과 데이터 연결(Concatenate)을 적절히 활용하면 복잡한 데이터 처리도 간단히 수행할 수 있습니다.
다음 글 예고:
이제 Pandas에서 데이터를 시각적으로 탐색할 수 있는 “시계열 데이터 처리 및 분석”을 배워보겠습니다!
This post is licensed under CC BY 4.0 by the author.