데이터프레임 값에 apply 로 함수 적용하는 다양한 방법
데이터 프레임의 값에 각 함수를 적용해야 할 때가 있다.
뭐 예를 들어서.. 각 행 별로 평균값을 계산해서 열로 만들어야 한다던지, 다 같이 +1 이 필요하다던지..
그런 경우에 데이터 프레임에 apply를 사용해서 원하는 값에 원하는 함수를 적용할 수 있다.
1. 데이터 준비
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(10, size = (5, )), columns=["First"])
df['Second'] = np.random.randint(10, size = (5,))
df['Third'] = np.random.randint(10, size = (5,)) # 임의의 데이터 프레임을 만들었음
df
np.random.randint()를 통해서 1~ 10 사이의 정수를 임의로 불러와 각 열을 (5, 1) size로 지정하여 데이터 프레임으로 만들었다. random 한 값을 불러오기 때문에 실행할 때 마다 새로운 값이 들어갈 수 있다.
이런 데이터 프레임이 있다고 할 때, apply를 이용해서 각 행별, 각 열별 평균을 구해보자!
2-1. apply 로 평균 구하기
df.apply(np.mean, axis = 1) # 행 별로 평균 구하기
axis = 1 일 때 각 행별로 평균이 잘 구해졌음을 확인할 수 있다.
(2 + 0 + 6) / 3 = 2.66666.......
df.apply(np.mean, axis = 0) # 열 별로 평균 구하기
axis = 0 일 때 각 열별로 평균이 잘 구해졌음을 확인할 수 있다.
(2 + 5 + 3 + 4 + 5) / 5 = 3.8
2-2. apply 로 합계 구하기
합계를 구하는 방법은 평균을 구하는 방법과 동일한데 np.mean대신 np.sum 을 쓰면 된다.
df.apply(np.sum, axis = 1) # 행 별로
df.apply(np.sum, axis = 0) # 열 별로
df['sum'] = df.apply(np.sum, axis = 1)
df
이렇게 각 행 별로 합을 구해서 새로운 열을 만들어낼 수 있다. 'sum' 이라는 열을 만들어 First + Second + Third 값을 저장해 주었다.
3. 나만의 함수 정의해서 사용하기
np 에 없는 함수를 따로 정의해서 apply로 사용할 수 있다.
예를 들어서 First 행의 값값을 제곱하고 그 값의 끝자리가 5면 0, 5가 아니면 1을 저장하는 열을 만들고 싶다고 하자.
의미는 없는 식이지만 예시를 들기 위해서 아무렇게나 생각해 낸 것이다.
이런 경우 나만의 함수를 정의해서 apply로 그 함수를 적용하면 된다.
def myFunc(x) :
if x**2 % 10 == 5 :
return 0
else :
return 1
df['myCol'] = df['First'].apply(myFunc)
df
First 행에 있는 값들을 제곱하고 끝자리가 5인 경우만 제대로 0이 들어간 새로운 열 myCol 이 잘 나왔음을 확인할 수 있었다.
4. lamda 함수 이용하기
apply 안에 lambda 함수를 써주는 것도 가능하다.
df['square'] = df['Second'].apply(lambda x : x ** 2)
df
lambda 함수가 잘 적용된 것을 확인할 수 있다.
5. 총 정리
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(10, size = (5, )), columns=["First"])
df['Second'] = np.random.randint(10, size = (5,))
df['Third'] = np.random.randint(10, size = (5,))
df.apply(np.mean, axis = 1)
df.apply(np.sum, axis = 1) # 행 별로 평균, 합 구해보기
df.apply(np.mean, axis = 0)
df.apply(np.sum, axis = 0) # 열 별로 평균, 합 구해보기
df['sum'] = df.apply(np.sum, axis = 1) # 행 별 합으로 새로운 열 만들어보기
def myFunc(x) :
if x**2 % 10 == 5 :
return 0
else :
return 1
df['myCol'] = df['First'].apply(myFunc) # 나만의 함수 정의해서 적용시키기
df['square'] = df['Second'].apply(lambda x : x ** 2) # 람다 함수 적용시키기
df # 데이터 프레임 확인
'self.python' 카테고리의 다른 글
[python] matplot 그래프 그리기 유용한 꿀팁! - (1) (0) | 2022.06.12 |
---|---|
[python] matplotlib 그래프 여러 개 그리는 방법 (0) | 2022.06.06 |
[python] 0 으로 채워진 데이터 프레임 만들기! - zeros (0) | 2022.05.31 |
[python] 데이터프레임 조건에 맞는 행 index 뽑아오기 - index (0) | 2022.05.30 |
[python] isin() 사용해서 데이터 프레임에서 데이터 값으로 행 추출하는 방법 (0) | 2022.05.29 |
댓글