Python Pandas DataFrame에서 그룹별 합계 구하기

2024-04-02

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() 함수를 사용하여 특정 열을 기준으로 데이터를 그룹화하고, 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


Python 문자열 목록을 쉼표로 구분된 문자열로 만드는 다양한 방법

join() 함수 사용:위 코드는 join() 함수를 사용하여 문자열 목록을 쉼표로 연결합니다. 결과는 다음과 같습니다.str. format() 사용:for 문자열 사용:위 코드는 for 문자열을 사용하여 문자열 목록을 반복하고 각 문자열을 쉼표와 함께 연결합니다...


제너레이터 표현식 vs 리스트 표현식: 파이썬에서 반복 가능한 데이터 시퀀스 생성하기

제너레이터 표현식과 리스트 표현식은 모두 Python에서 반복 가능한 데이터 시퀀스를 생성하는 데 사용되는 강력한 도구입니다. 하지만 작동 방식과 용도에는 몇 가지 주요 차이점이 있습니다.리스트 표현식은 리스트를 직접 생성하는 데 사용됩니다...


NumPy 배열을 CSV 파일에 저장하는 방법 (Python)

savetxt 함수 사용:numpy. savetxt 함수는 NumPy 배열을 텍스트 파일로 저장하는 데 사용됩니다. CSV 형식은 텍스트 파일의 특수한 경우이므로 이 함수를 사용하여 CSV 파일에 배열을 저장하는 데 적합합니다...


Pandas 데이터프레임에서 마지막 행 데이터 삭제하기

Pandas에서 데이터프레임의 행을 삭제하는 가장 일반적인 방법은 drop() 함수를 사용하는 것입니다.iloc[] 인덱싱을 사용하여 마지막 행을 슬라이싱하는 방법도 있습니다.loc 사용:loc 인덱싱을 사용하여 마지막 행을 이름으로 삭제할 수도 있습니다...


PyTorch 모델 성능 저하: 로컬 vs. Flask 서버 비교 분석

PyTorch 모델을 로컬 환경에서 실행하면 빠르고 정확하게 작동하지만, Flask 서버에 배포하면 성능이 저하되고 이미지 품질도 떨어지는 경우가 발생합니다.원인:Flask 서버에서 PyTorch 모델 성능 저하의 원인은 다양할 수 있지만...


python pandas dataframe