본문 바로가기
Python/빅데이터분석기사(실기)

[빅분기실기]_작업형 1유형 까먹을 것 같은 것 정리하기!(3)_apply, map

by ssolLEE 2023. 10. 15.
반응형

APPLY, MAP

  • apply(), map()은 모두 데이터 프레임에 함수를 적용하는 메서드입니다. 
  • 따라서 lambda와도 자주 사용합니다.
  • apply()는 Series, 데이터프레임의 행, 열 등에 모두 사용이 가능합니다. 
  • map()은 Series에만 사용이 가능합니다.

 

  • Income_Category의 카테고리를 map함수를 이용하여 다음과 같이 변경하여 newIncome 컬럼에 매핑하기
    • Unknown : N
    • Less than $40K : a
    • $40K~$60K : b
    • $60K~$80K : c
    • $80K~$120K : d
    • $120K+ : e
dic = {
    'Unknown' : 'N',
    'Less than $40K' : 'a',
    '$40K - $60K' : 'b',
    '$60K - $80K' : 'c',
    '$80K - $120K' : 'd',
    '$120K +' : 'e'
}
df['newIncome'] = df.Income_Category.map(lambda x : dic[x])
df['newIncome'].head()

  • 위의 것을 apply 함수를 이용하여 실행하기
def changeCategory(x):
    if x =='Unknown':
        return 'N'
    elif x =='Less than $40K':
        return 'a'
    elif x =='$40K - $60K':   
        return 'b'
    elif x =='$60K - $80K':    
        return 'c'
    elif x =='$80K - $120K':   
        return 'd'
    elif x =='$120K +' :     
        return 'e'

df['newIncome'] = df.Income_Category.apply(changeCategory)
df['newIncome'].head()
  • Customer_Age의 값을 이용하여 나이 구간을 AgeState 컬럼으로 정의하기(0-9 : 0, 10-19 : 10 등) & 각 구간의 빈도수 출력
df['AgeState'] = df['Customer_Age'].map(lambda x : x //10 * 10)
df['AgeState'].value_counts().sort_index()

  • Ecucation_Level의 값 중 Graduate 단어가 포함되는 값은 1, 그렇지 않은 경우에는 0으로 변경하여 newEduLevel 컬럼을 정의하고 빈도수 출력하기
df['newEduLevel'] = df['Education_Level'].map(lambda x : 1 if 'Graduate' in x else 0)
df['newEduLevel'].value_counts()

  • Marital_Status 컬럼값이 Married이고 Card_Category 컬럼 값이 Platinum인 경우 1, 그외의 경우는 모두 0으로 하는 newState 컬럼을 정의하고 각 값들의 빈도수 출력하기
    • Change 함수를 정의하였습니다. x는 함수의 인수로, 데이터프레임의 각 행을 나타내는 Series 객체입니다.
    • 조건문을  사용하여 원하는 결과로 return하도록 하였습니다.
    • apply 함수를 사용하여 각 행(axis=1)에 대해 Change 함수를 적용하도록 하였습니다.
    • 그 결과를 df의 newStatus 컬럼에 저장하도록 합니다.
def Change(x):
	if x['Marital_Status'] == 'Married' and x['Card_Category'] == 'Platinum':
    	return 1
    else:
    	return 0
 
df['newStatus'] = df.apply(Change, axis=1)
df['newStatus'].value_counts()

 

 

오늘은 apply, map 함수 사용에 대해서 연습해보았어요. 

처음엔 어려웠지만 하다보니 익숙해지네요.

함수 쓰는 연습도 함께!! 

주로 apply를 많이 사용하는 것도 잊지 마세요!

 

오늘도 감사합니다.