03-01. 축 기준 (apply)
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)
개요
apply 메서드는 DataFrame에 함수를 적용하여 반환하는 메서드 입니다.
함수에 전달되는 객체는 Seires형식이며 DataFrame의 index(axis=0)이냐 columns(axis=1)이냐에 따라 다릅니다.
최종반환 유형은 적용된 함수에 따라 정해지지만 result_type을 지정하여 변경이 가능합니다.
사용법
기본 사용법
df.apply(func, axis=0, raw=False, result_type=None, args=(), kwargs)
function : 각 행이나 열에 적용할 함수 입니다.
axis : {0 : Index / 1 : columns} 함수를 적용할 축 입니다.
row : {True : ndarray / False : Series} 함수에 전달할 축의 형식입니다.
True면 ndarray형태로 전달하고 False면 Series형태로 전달합니다. 기본적으로 Series입니다.
result_type : {expand / reduce / broadcast} 반환값의 형태를 결정합니다. expand이면 배열 형태를
기준으로 열을 확장합니다.(기본 인덱스로), reduce인 경우는 그대로 Serise형태로 반환합니다.
broadcase인 경우 기존 열 형식대로 확장하여 반환합니다.(열의 수가 같아야합니다.)
예시
먼저, 간단한 3x3 객체를 하나 생성하겠습니다.
col = ['col1','col2','col3']
row = ['row1','row2','row3']
data = [[1,2,3],[4,5,6],[7,8,9]]
df = pd.DataFrame(data=data,index=row,columns=col)
print(df)
>>
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
func의 성질에 따른 차이
func항목이 np.sqrt처럼 축에대해 계산할 수 없는 형식이라면 아래와 같이 각 요소에 적용됩니다.
print(df.apply(np.sqrt))
>>
col1 col2 col3
row1 1.000000 1.414214 1.732051
row2 2.000000 2.236068 2.449490
row3 2.645751 2.828427 3.000000
np.sum처럼 축에대해 적용이 가능한경우라면 축 기준으로 연산을 수행합니다.
print(df.apply(np.sum))
>>
col1 12
col2 15
col3 18
dtype: int64
axis에 따른 차이
axis가 0인경우 Index(행)에 대해 연산을 수행하고, 1인경우는 columns(열)에 대해 연산을 수행합니다.
print(df.apply(np.prod,axis=0))
>>
col1 28
col2 80
col3 162
dtype: int64
print(df.apply(np.prod,axis=1))
>>
row1 6
row2 120
row3 504
dtype: int64
result_type에 따른 차이
먼저 lamba를 사용하여 기존 DataFrame에 [1,2,3]객체를 apply해보겠습니다.
print(df.apply(lambda x : [1,2,3]))
>>
col1 col2 col3
row1 1 1 1
row2 2 2 2
row3 3 3 3
result_type = 'expand'인 경우
func를 기준으로 확장하여 columns를 지정하게 되는것을 확인할 수 있습니다.
print(df.apply(lambda x : [1,2,3], axis=1,result_type='expand'))
>>
0 1 2
row1 1 2 3
row2 1 2 3
row3 1 2 3
result_type = 'reduce'인 경우
func를 기준으로 축소하여 columns없이 Series 객체로 반환하는것을 확인할 수 있습니다.
print(df.apply(lambda x : [1,2,3], axis=1,result_type='reduce'))
>>
row1 [1, 2, 3]
row2 [1, 2, 3]
row3 [1, 2, 3]
dtype: object
result_type = 'broadcast'인 경우
func를 기준으로 확장하되, columns는 기존 DataFrame의 것을 사용하는것을 확인할 수 있습니다.
print(df.apply(lambda x : [1,2,3], axis=1,result_type='broadcast'))
>>
col1 col2 col3
row1 1 2 3
row2 1 2 3
row3 1 2 3
'파이썬완전정복-Pandas DataFrame > 03. 함수의 적용' 카테고리의 다른 글
Pandas DataFrame 03-06. 문자열 형식의 계산식 적용 (eval) (0) | 2022.01.10 |
---|---|
Pandas DataFrame 03-05. 함수연속적용_요소별 (transform) (0) | 2022.01.10 |
Pandas DataFrame 03-04. 함수연속적용_축별 (aggregate, agg) (0) | 2022.01.10 |
Pandas DataFrame 03-03. 함수내 함수 연속적용 (pipe) (0) | 2022.01.10 |
Pandas DataFrame 03-02. 요소별 (applymap) (0) | 2022.01.10 |