Python/Pandas

[Pandas] 그룹핑

yeonny_do 2023. 11. 13. 19:09

 ■ 그룹핑

   - 특정 값을 기준으로 몇 개의 그룹으로 분할하여 처리하는 방식

 

 

※ 데이터 준비

 
df = pd.DataFrame({'A':['chol','young']*3+['chol'],
                  'B':['one','one','two','one','two','two','one'],
                  'C':np.random.randn(7),
                  'D': np.random.randn(7)})
df
 

 

 


□ 그룹 객체 만들기

 

 
grouped = df.groupby('B')
print(grouped)

for key, group in grouped:
    print('key : ',key)
    print('그룹 개수 : ',len(group))
    print(group.head())
    print('-'*40)
 

 

 

 

 
# 특정 그룹만 선택 가능
one_group=grouped.get_group('one')
one_group.head()
 

 

 

 


□ 그룹 연산

 

  - 그룹별 통계치 구하기   :   df.groupby(컬럼명)[컬럼명 목록].통계함수()

  - Dataframe의 함수 적용 가능 컬럼들에 대해 그룹별 통계치를 구함

  - 통계함수 : sum, mean,std, var, min, max, count, quantil 등

 

 
df.groupby('B').sum()
 

 

 

 

 
df.groupby('B')[['C','D']].sum()
 

 

 

 

  - csv파일에 저장된 데이터 dataframe으로 읽어오기

sales.csv 파일

 

 
data = pd.read_csv('sales.csv')
display(data)
 

 

 

 


data
.groupby('부서')[['매출액']].sum()


data
.groupby('부서')['매출액'].sum()

 

   ※ 왼쪽의 경우, 컬럼 명을 리스트로 전달했으므로 결과값이 dataframe으로 반환되고, 오른쪽의 경우는 Series로 반환됨

 

 

 
data.groupby(['부서','연도'])[['매출액']].sum()
 

 

 

 
data.pivot_table(index=['부서','연도'],values='매출액',aggfunc='sum')
 

 

※ 위의 그룹함수 사용한 코드와 동일한 결과 반환함

 

 

 

 


□  Aggregation

 

  : df.groupby(컬럼명)[컬럼명].agg(통계함수1, 통계함수2,...)

 

 

 
grouped = data.groupby('부서')

def min_max(x):
    return x.max()-x.min()

grouped['매출액'].agg(min_max)
 

 

※ agg에 사용자 정의 함수도 넣을 수 있음

 

 

 

 
grouped['매출액'].agg(['sum','mean','max','min'])