반응형

03-04. 함수연속적용_축별 (aggregate, agg)


DataFrame.aggregate(func=None, axis=0, args, kwargs)

DataFrame.agg(func=None, axis=0, args, kwargs)

 

개요


agg메서드는 apply와 비슷하게 함수를 적용하는 메서드이지만,
여러개의 함수를 동시에 적용할 수 있다는 장점이 있습니다.
그리고 __name__를통해 사용자정의 함수명을 따로 설정할경우 그 이름을 사용한다는 점을 활용하여
함수를 사용한 DataFrame을 보다 깔끔하게 정리하는데도 용이하게 쓸 수 있습니다.

 

사용법


기본 사용법
df.agg(func=None, axis=0, args, kwargs)
func : 함수입니다.
axis :{0 : index(row) / 1 : columns} 축입니다 0은 행, 1은 열 입니다. arg : 함수의 인수 입니다..
kwargs : dict 형태의 함수의 인수입니다.

반응형

 

예시


먼저 간단한 3x3짜리 데이터를 만들어보겠습니다.

df = pd.DataFrame([[1,4,7],[2,5,8],[3,6,9]])
print(df)
>>
   0  1  2
0  1  4  7
1  2  5  8
2  3  6  9

입력되는 함수의 형태에 따라
입력함수로는 먼저 np.함수 형태나 그냥 문자열 형태로의 입력이 가능합니다.
np함수의 경우

ex1 = df.agg(np.prod)
print(ex1)
>>
0      6
1    120
2    504
dtype: int64

문자열일 경우

ex2 = df.agg('prod')
print(ex2)
>>
0      6
1    120
2    504
dtype: int64

lambda함수나 사용자 정의 함수를사용할 수도 있습니다.
lambda함수를 사용할 경우 열 명칭은 <lambda>가 됩니다.

ex3 = df.agg([lambda x : min(x) * max(x)])
print(ex3)
>>
          0   1   2
<lambda>  3  24  63

사용자정의 함수를 사용하게되면 기본적으로 함수명 열 이름으로 설정이 됩니다.

def func_sub(input):
    return max(input)-min(input)
ex4 = df.agg([func_sub,'sum'])
print(ex4)
>>
          0   1   2
func_sub  2   2   2
sum       6  15  24

만약 함수명을 __name__메서드를 통해 따로 설정해주면 그 이름이 쓰입니다.

def func_sub(input):
    return max(input)-min(input)
func_sub.__name__='내함수'
ex5 = df.agg([func_sub,'sum'])
print(ex5)
>>
     0   1   2
내함수  2   2   2
sum  6  15  24


여러 함수를 동시에 적용하는 경우
list나 dict형태로 func값을 입력하는 경우 여러 함수를 동시에 적용할 수 있습니다.
list로 입력하는 경우

ex6 = df.agg(['min','max','sum','prod'])
print(ex6)
>>
      0    1    2
min   1    4    7
max   3    6    9
sum   6   15   24
prod  6  120  504

dict를 이용하는 경우 순서를 변경하는것도 가능합니다.

ex7 = df.agg({2:'sum',0:'max',1:'min'})
print(ex7)
>>
2    24
0     3
1     4
dtype: int64

dict함수내에 다중함수를 적용할 수도 있습니다. 이 경우 해당되지 않는 index는 NaN을 출력합니다.

ex8 = df.agg({0:['sum','prod'],1:['max','min'],2:'mean'})
print(ex8)
>>
        0    1    2
sum   6.0  NaN  NaN
prod  6.0  NaN  NaN
max   NaN  6.0  NaN
min   NaN  4.0  NaN
mean  NaN  NaN  8.0


axis인수를 변경할 경우
axis의경우 0이면 index, 1이면 columns 기준으로 연산을 진행합니다.

ex2 = df.agg('prod', axis=0)
print(ex2)
>>
0      6
1    120
2    504
dtype: int64
ex3 = df.agg('prod', axis=1)
print(ex3)
>>
0     28
1     80
2    162
dtype: int64
반응형

+ 최근 글