Pandas7_2

지두의 개발자 도전기·2025년 3월 13일

Pandas

목록 보기
9/9
post-thumbnail

데이터 집계

1. 집계 함수 (그룹화 집계 메소드)

  • 그룹화된 데이터에서 다양한 통계량을 계산할 때 사용됨.
  • 대표적인 집계 함수들은 아래와 같음.
메소드설명
.sum()그룹별 합계
.mean()그룹별 평균
.median()그룹별 중앙값
.min()그룹별 최소값
.max()그룹별 최대값
.count()그룹별 개수
.std()그룹별 표준편차
.var()그룹별 분산
.first()그룹별 첫 번째 값
.last()그룹별 마지막 값
import pandas as pd

df = pd.DataFrame({'A': ['foo', 'foo', 'bar', 'bar'],
                   'B': [1, 2, 3, 4]})

grouped = df.groupby('A').sum()
print(grouped)
# 출력
#        B
# A
# bar    7
# foo    3

2. 사용자 정의 집계 함수

  • 기본 제공 집계 함수 외에도 사용자가 직접 함수를 정의하여 적용 가능함.
  • agg() 또는 apply()를 활용하여 특정 연산 수행 가능함.
def custom_function(x):
    return x.max() - x.min()

grouped = df.groupby('A')['B'].agg(custom_function)
print(grouped)
# 출력
# A
# bar    1
# foo    1

3. 비집계 함수

  • 데이터 변환에 사용되는 함수로, 그룹별 특정 연산을 수행하지만 전체를 하나의 값으로 줄이지 않음.
  • .transform()을 사용하면 원래 데이터의 형태를 유지하면서 그룹별 연산을 적용 가능함.
df['B_normalized'] = df.groupby('A')['B'].transform(lambda x: (x - x.mean()) / x.std())
print(df)
# 출력
#      A  B  B_normalized
# 0  foo  1          -1.0
# 1  foo  2           1.0
# 2  bar  3          -1.0
# 3  bar  4           1.0

4. 열별로 여러 함수 적용하기

  • 여러 개의 집계 함수를 한 번에 적용할 수 있음.
df.groupby('A').agg({'B': ['sum', 'mean', 'std']})
# 출력
#          B
#        sum mean  std
# A
# bar     7  3.5  0.7071
# foo     3  1.5  0.7071

5. apply() - 다목적 데이터 집계

  • 그룹화 후 특정 연산을 수행하여 데이터 변환이 가능함.
df.groupby('A').apply(lambda x: x.sort_values('B', ascending=False))

6. 그룹키 제거

  • group_keys=False 옵션을 주면 그룹화된 데이터에서 키를 제거하고 원래 형태를 유지할 수 있음.
df.groupby('A', group_keys=False).apply(lambda x: x.head(1))

7. 분위와 구간 분석

  • qcut()을 사용하여 데이터를 분위수 기준으로 나눌 수 있음.
df['quantile'] = pd.qcut(df['B'], q=4)
print(df)

8. 그룹별 결측치 채우기

  • 그룹별 평균값으로 결측치를 채울 수 있음.
df.groupby('A').apply(lambda x: x.fillna(x.mean()))

9. 무작위 샘플링

  • sample()을 사용하여 그룹별 샘플을 선택할 수 있음.
df.groupby('A').apply(lambda x: x.sample(n=1))

10. 그룹별 가중치 합

  • 특정 열을 가중치로 사용하여 그룹별 합계를 계산할 수 있음.
df.groupby('A').apply(lambda x: (x['B'] * x['B']).sum())

11. 그룹 단위 선형회귀

  • 그룹별로 선형회귀를 수행할 수 있음.
from sklearn.linear_model import LinearRegression

def lin_reg(df):
    model = LinearRegression()
    X = df[['B']]
    y = df['B']
    model.fit(X, y)
    return model.coef_[0]

df.groupby('A').apply(lin_reg)

12. 그룹 변환

  • 그룹별 연산을 수행하면서 결과의 크기를 원래 데이터와 동일하게 유지할 수 있음.
df.groupby('A')['B'].transform(lambda x: x - x.mean())

13. 피벗 테이블

  • 피벗 테이블을 사용하여 특정 그룹별 통계를 계산할 수 있음.
pd.pivot_table(df, values='B', index='A', aggfunc='mean')

14. Cross-Tabulations: crosstab

  • 교차 테이블을 사용하여 범주형 변수 간의 관계를 분석할 수 있음.
pd.crosstab(df['A'], df['B'])

0개의 댓글