프로그래밍/Python 관련 정보

[Pandas 기초] DataFrame 집계 method

물박사의 저장공간 2025. 4. 27. 23:27

2025.02.24 - [프로그래밍/Python 관련 정보] - [Pandas] Table of Contents


이번 포스팅에서는 결과물의 차원에 초점을 두고 DataFrame의 집계 method에 대해서 알아보도록 하겠습니다. 매서드들의 결과물은 당연하게도 어떤 함수냐에 따라 다양한 shape으로 나올 수 있습니다. “결과물의 차원(Shape)” 관점에서 메서드들을 나눠 보면 크게 세 가지로 분류할 수 있습니다:

 

더보기
df = pd.DataFrame({
    'A': ['x','x','y','y','z'],
    'v1':[1,2,3,4,5],
    'v2':[10,20,30,40,50]
})

 

1. 축소(Reduction)

결과가 그룹 수 혹은 컬럼 수만큼의 차원을 가지며, 원본보다 작아집니다.
예) agg() / aggregate(), mean(), sum() 등

# 그룹별 총합(scalar 반환 → 축소)
result = df.groupby('A').agg('sum')
print(result)
print(result.shape)   # (3, 2) → 그룹 3개, 컬럼 2개



2. 변환(Transformation)

각 그룹 혹은 컬럼에 함수를 적용하되, 원본과 같은 차원을 유지합니다.
예) 대표 메서드: transform()

# 그룹별 평균으로 원본 크기 유지 → 5행 2컬럼
trans = df.groupby('A')[['v1','v2']].transform('mean')
print(trans)
print(trans.shape)  # (5, 2)



3. 확장(Expansion) / 사용자 정의 적용

사용자가 반환하는 형태에 따라 결과 차원이 자유롭게 달라집니다.
예) apply()

# 예: 각 그룹별로 (max - min) 차이를 계산해 Series 반환
def range_diff(subdf):
    return pd.Series({
        'v1_range': subdf['v1'].max() - subdf['v1'].min(),
        'v2_range': subdf['v2'].max() - subdf['v2'].min()
    })

applied = df.groupby('A').apply(range_diff)

 

 

Comment1) groupby 후에도 이런 dataframe의 집계 매서드들을 유사하게 사용할 수 있습니다. 대신 '그룹 별'로 이 계산을 하는 것일 뿐 기능적으로는 비슷하게 작동한다는 것이죠. (차원도 기본적으로 데이터프레임 매서드의 output 꼴을 따라가되, '그룹 별'로 나오겠죠)

 

Comment2) 집계매서드 들 중에서 일부는 DataFrame형태가 아닌 Series 형태에서만 적용가능한 것들도 있습니다(예: unique, value_counts, nlargest, nsmallest)