Post

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.