DF.groupby('그룹으로묶을기준컬럼')['집계할 컬럼'].집계함수()
# 그룹바이
grouped = flights.groupby('AIRLINE')
grouped.groups # 잘 쓰지 않지만, 어떤 식으로 그룹지어졌는지 보려고
# 각 값의 인덱스를 가지고 있다.
# 집계 대상 선택
flights.groupby('AIRLINE')['ARR_DELAY'].mean()
# 에어라인별로 평균 도착 지연시간
# 두 개 이상의 컬럼 선택
flights.groupby('AIRLINE')[['DEP_DELAY','ARR_DELAY']].mean()
# 인덱스 명은 고유값이 나옴.
# 팬시 인덱싱 안하면 경고 나옴 ㄷㄷㄷ
# 경고가 나온다면 조만간 없어진다는 뜻. will be deprecated
# 합계
flights.groupby('AIRLINE')[['DEP_DELAY','ARR_DELAY']].sum()
# 합쳐서 agg
stat = flights.groupby('AIRLINE')[['DEP_DELAY','ARR_DELAY']].agg(['sum', 'mean', 'median'])
stat
# 멀티 인덱스 조회하기
stat['ARR_DELAY']
# 멀티 인덱스 안에 인덱스를 조회하기
# A.D 밑에 sum 조회
stat['ARR_DELAY']['sum']
stat['ARR_DELAY','sum']
# 둘 다 가능하다.
# 컬럼마다 집계하는 함수가 다를 때
# agg 안에서 딕셔너리로 해결
flights.groupby('AIRLINE').agg({'DEP_DELAY':'sum',
'ARR_DELAY':'sum',
'AIR_TIME':'mean'})
# 두 개 이상의 열로 그룹묶기
# 출발공항, 도착공항
flights.groupby(['ORG_AIR', 'DEST_AIR'])['ARR_DELAY'].mean()
# 딕셔너리 이용해서 agg
dic = {
'ARR_DELAY':['sum','mean'],
'AIR_TIME':['mean','std']
}
stat2 = flights.groupby(['ORG_AIR', 'DEST_AIR']).agg(dic)
stat2
# 컬럼도 멀티 인덱스, 인덱스도 멀티 인덱스
# stat2의 AIR_TIME 조회
stat2['AIR_TIME'].head()
# stat2의 AIR_TIME의 평균만 보고싶을 때
stat2['AIR_TIME','mean'].head()
# 인덱스가 ATL인 것
stat2.loc['ATL']
# 인덱스가 ATL의 ABE
stat2.loc['ATL','ABE']
# 취소된 전체 건 수
flights['CANCELLED'].value_counts()
# 항공사별 취소
stat3 = flights.groupby('AIRLINE')['CANCELLED'].sum()
stat3
# 100건 이상 취소된 항공사만 보기
stat3[stat3>100]
# 이거는 변수에 넣어놓고 하는게 맞다. 너무 복잡
DataFrame.agg(func=None, axis=0, \*args, \*\*kwargs)
Series.agg(func=None, axis=0, \*args, \*\*kwargs)
SeriesGroupBy.agg(func=None, \*args, \*\*kwargs)
DataFrameGroupBy.agg(func, \*args, \*\*kwargs)
*args, **kwargs는 사용자 정의 함수에 선언한 매개변수가 있을 경우 전달할 값을 전달한다.
# 최대 값과 최소 값의 차이를 집계하는 함수
def max_min_diff(x):
'''
[매개변수]
x : Series - 집계대상
'''
return x.max() - x.min()
# 직접 만든 함수 사용해보기
max_min_diff(flights['ARR_DELAY'])
# a.max() - 객체 지향적 방식
# flights['ARR_DELAY'].max_min_diff() # 오류 발생
# 이거는 내가 만든거라 안됨.
# 이 때! agg 사용
flights['ARR_DELAY'].agg(max_min_diff)
# 이건 문자열로 넘기면 안된다.
# agg 쓰던지, 직접 넣던지 둘 중에 하나.
# 다른 함수랑 묶어서 보고싶을 때는 agg 를 사용한다.
flights['ARR_DELAY'].agg(['min','max',max_min_diff])
# 그룹바이로 사용하기
flights.groupby('AIRLINE')['ARR_DELAY'].agg(['max','min',max_min_diff])
# 매개변수가 있는 사용자 정의 집계 함수.
# 추가적인 대상이 더 필요함.
def check_max(x, threshold):
'''
x의 최대값이 threshold 이상인지 체크
[매개변수]
x : Series - 집계대상
threshold : int - 최댓값과 비교할 정수
[반환값]
boolean 불리언 값으로 반환.
'''
return x.max()>=threshold
# 필요에 따라서 내가 함수를 만들어서 사용할 수 있다.
flights['ARR_DELAY'].max()
check_max(flights['ARR_DELAY'], 2000)
# agg에 이용해보기
flights['ARR_DELAY'].agg(check_max, 0, 2000) # 헷갈릴 거 같아?
# 축을 바꿀 때는 이걸 쓰자.
# 보통 거의 열 단위로 집계하기 때문에
# kwargs를 쓰자
# threshold=2000
flights['ARR_DELAY'].agg(check_max, threshold=2000)
# groupby
flights.groupby('AIRLINE')['ARR_DELAY'].agg(check_max, threshold=800)
# 두 개 이상은 묶어서 할 수 없음.
# 함수 만들 때 x를 시리즈가 아니라 데이터 프레임을 기준으로 만들어야된다.