Python Pandas DataFrame에서 그룹별 합계 구하기
Python Pandas DataFrame에서 그룹별 합계 구하기
문제 요약
샘플 데이터
다음과 같은 샘플 데이터를 사용합니다.
import pandas as pd
df = pd.DataFrame({
"Name": ["Alice", "Bob", "Carol", "Alice", "Bob"],
"Age": [25, 30, 28, 25, 32],
"City": ["Seoul", "Busan", "Seoul", "Incheon", "Busan"]
})
print(df)
# Name Age City
# 0 Alice 25 Seoul
# 1 Bob 30 Busan
# 2 Carol 28 Seoul
# 3 Alice 25 Incheon
# 4 Bob 32 Busan
groupby() 함수 사용
groupby()
함수를 사용하여 특정 열을 기준으로 데이터를 그룹화하고, sum()
함수를 사용하여 각 그룹별 합계를 계산합니다.
# "Name" 열을 기준으로 그룹화
grouped_df = df.groupby("Name")
# "Age" 열의 그룹별 합계 계산
sum_df = grouped_df["Age"].sum()
print(sum_df)
# Name
# Alice 50
# Bob 62
# Carol 28
여러 열의 합계 계산
여러 열의 합계를 동시에 계산하려면 sum()
함수를 리스트 안에 넣어줍니다.
# "Age"와 "City" 열의 그룹별 합계 계산
sum_df = grouped_df["Age", "City"].sum()
print(sum_df)
# Age City
# Name
# Alice 50 Seoul
# Bob 62 Busan
# Carol 28 Seoul
추가 집계 함수 사용
sum()
함수 외에도 mean()
, std()
, max()
, min()
등 다양한 집계 함수를 사용할 수 있습니다.
# "Age" 열의 그룹별 평균, 최대값, 최소값 계산
grouped_df["Age"].agg(["mean", "max", "min"])
# Name mean max min
# Alice 25.0 25 25
# Bob 31.0 32 30
# Carol 28.0 28 28
주의 사항
groupby()
함수는 그룹화 기준 열의 데이터 타입이 범주형(categorical)인 경우 정상 작동하지만, 숫자형(numerical)인 경우 오류가 발생할 수 있습니다.- 숫자형 열을 그룹화 기준으로 사용하려면 먼저
astype("category")
함수를 사용하여 범주형으로 변환해야 합니다.
참고 자료
예제 코드
import pandas as pd
# 샘플 데이터
df = pd.DataFrame({
"Name": ["Alice", "Bob", "Carol", "Alice", "Bob"],
"Age": [25, 30, 28, 25, 32],
"City": ["Seoul", "Busan", "Seoul", "Incheon", "Busan"]
})
# "Name" 열을 기준으로 그룹화
grouped_df = df.groupby("Name")
# "Age" 열의 그룹별 합계 계산
sum_df = grouped_df["Age"].sum()
# 결과 출력
print(sum_df)
# Name
# Alice 50
# Bob 62
# Carol 28
추가 예제
# "Age"와 "City" 열의 그룹별 합계 계산
sum_df = grouped_df["Age", "City"].sum()
# 결과 출력
print(sum_df)
# Age City
# Name
# Alice 50 Seoul
# Bob 62 Busan
# Carol 28 Seoul
추가 집계 함수 사용
# "Age" 열의 그룹별 평균, 최대값, 최소값 계산
grouped_df["Age"].agg(["mean", "max", "min"])
# 결과 출력
# Name mean max min
# Alice 25.0 25 25
# Bob 31.0 32 30
# Carol 28.0 28 28
숫자형 열을 그룹화 기준으로 사용하기
# "Age" 열을 범주형으로 변환
df["Age"] = df["Age"].astype("category")
# "Age" 열을 기준으로 그룹화
grouped_df = df.groupby("Age")
# "Name" 열의 그룹별 갯수 계산
count_df = grouped_df["Name"].count()
# 결과 출력
print(count_df)
# Age Name
# 25 2
# 28 1
# 30 1
# 32 1
Pandas DataFrame에서 그룹별 합계 계산: 대체 방법
dict comprehension 사용
# "Name" 열을 기준으로 그룹화
groups = df.groupby("Name")
# 그룹별 합계 계산
sum_dict = {key: group["Age"].sum() for key, group in groups}
# 결과 출력
print(sum_dict)
# {'Alice': 50, 'Bob': 62, 'Carol': 28}
for 루프 사용
# "Name" 열을 기준으로 그룹화
groups = df.groupby("Name")
# 그룹별 합계 계산
sum_dict = {}
for name, group in groups:
sum_dict[name] = group["Age"].sum()
# 결과 출력
print(sum_dict)
# {'Alice': 50, 'Bob': 62, 'Carol': 28}
reduce() 함수 사용
from functools import reduce
# "Name" 열을 기준으로 그룹화
groups = df.groupby("Name")
# 그룹별 합계 계산
sum_dict = reduce(lambda d, g: d.update({g[0]: g[1]["Age"].sum()}), groups, {})
# 결과 출력
print(sum_dict)
# {'Alice': 50, 'Bob': 62, 'Carol': 28}
apply() 함수 사용
def g(df):
return df["Age"].sum()
# "Name" 열을 기준으로 그룹화
grouped_df = df.groupby("Name")
# 그룹별 합계 계산
sum_df = grouped_df.apply(g)
# 결과 출력
print(sum_df)
# Name
# Alice 50
# Bob 62
# Carol 28
agg() 함수 사용
# "Name" 열을 기준으로 그룹화
grouped_df = df.groupby("Name")
# "Age" 열의 그룹별 합계 계산
sum_df = grouped_df["Age"].agg("sum")
# 결과 출력
print(sum_df)
# Name
# Alice 50
# Bob 62
# Carol 28
최적의 방법 선택
위의 방법들 중 어떤 방법을 사용할지는 상황에 따라 다릅니다.
- 데이터 크기가 작거나 간단한 계산을 수행하는 경우
dict comprehension
또는for
루프를 사용하는 것이 간단할 수 있습니다. - 데이터 크기가 크거나 복잡한 계산을 수행하는 경우
groupby()
함수와agg()
함수를 사용하는 것이 효율적입니다. - 코드의 가독성을 중요하게 생각하는 경우
apply()
함수를 사용하는 것이 좋습니다.
python pandas dataframe