👨🏻💻판다스(Pandas)의 데이터 프레임(Data Frame)의 Group by 함수가 있다.
df.groupby( )함수는 SQL의 group by와 유사하다.
df.groupby( ) 함수는 원하는 컬럼을 그룹별로 묶어서 해당 컬럼과 연관된 컬럼의 연산된 값을 데이터 프레임으로 반환한다.
df.groupby( )함수의 기본 구조는 아래와 같다.
df.groupby('컬럼명1')['컬럼명2'].그룹함수()
컬럼명1의 유일한 값 (Unique)값을 추출 후,
컬럼명1의 해당하는 컬럼명2의 값을 그룹함수로 연산한 값을 하나의 데이터 프레임으로 반환한다.
표로 설명하자면 아래와 같다.
👉new_df = df.groupby('부서')['급여'].sum( )
우선 '부서별'로 유일한 값을 추출하면 '영업', '기획', '마케팅'이 된다.
각 '부서별'과 연관된 컬럼 '급여'의 sum() 값이 출력된다.
- 영업 : 220 + 250 = 470
- 기획 : 320 + 280 = 600
- 마케팅 : 300
import numpy as np
import pandas as pd
df = pd.DataFrame({'부서' : ['영업', '기획', '영업', '마케팅', '기획'],
'직급' : ['사원', '대리', '주임', '대리', '주임'],
'성별' : ['남', '여', '남', '여', '남'],
'급여' : [220, 320, 250, 300, 280]})
print(df)
'''
부서 직급 성별 급여
0 영업 사원 남 220
1 기획 대리 여 320
2 영업 주임 남 250
3 마케팅 대리 여 300
4 기획 주임 남 280
'''
new_df = df.groupby('부서')['급여'].sum()
print(new_df)
'''
부서
기획 600
마케팅 300
영업 470
Name: 급여, dtype: int64
'''
new_df = df.groupby('부서')['성별'].count()
print(new_df)
'''
부서
기획 2
마케팅 1
영업 2
Name: 성별, dtype: int64
'''
new_df = df.groupby('직급')['급여'].mean()
print(new_df)
'''
직급
대리 310.0
사원 220.0
주임 265.0
Name: 급여, dtype: float64
'''
new_df = df.groupby(['부서', '직급'])['급여'].sum()
print(new_df)
'''
부서 직급
기획 대리 320
주임 280
마케팅 대리 300
영업 사원 220
주임 250
Name: 급여, dtype: int64
'''
new_df = df.groupby('부서')[['직급', '성별']].count()
print(new_df)
'''
직급 성별
부서
기획 2 2
마케팅 1 1
영업 2 2
'''
new_df = df.groupby(['부서', '직급'] )['급여'].agg([np.sum, np.mean])
print(new_df)
'''
sum mean
부서 직급
기획 대리 320 320.0
주임 280 280.0
마케팅 대리 300 300.0
영업 사원 220 220.0
주임 250 250.0
'''
물론, 컬럼명1, 컬럼명2에는 다중 컬럼을 기입할 수 있다.
그룹함수( )도 sum(), mean(), max(), min(), count()등의 다양한 함수를 사용할 수 있다.
또한, 그룹함수( )도 다중으로 사용이 가능하다.
다중으로 사용할 땐 aggregation 함수인 agg( )를 사용하면 된다.
df.groupby('컬럼명1')['컬럼명2'].agg([그룹함수1, 그룹함수2, ...])
*aggregation 의 뜻은 '집합'이다.
그룹 함수인 df.groupby( )함수는 데이터 프레임에서 자주 사용된다.
SQL 에서의 group by 도 자주 사용된다.
💪그러니 각 사용 용도에 맞춰서 특징을 잘 기억하고 익혀두도록 하자 !