apply, map ์ ํ์ฉํ ๋ฐ์ดํฐ ๋ณํ
import pandas as pd
df = pd.DataFrame({'a' : [1, 2, 3, 4, 5]})
-๋ฌธ์ : a ๊ฐ 2 ๋ณด๋ค ์์ผ๋ฉด '2 ๋ฏธ๋ง', 4 ๋ณด๋ค ์์ผ๋ฉด '4 ๋ฏธ๋ง', 4 ๋ณด๋ค ํฌ๋ฉด '4 ์ด์' ์ด ์ ์ฅ๋ b ์นผ๋ผ์ ์ถ๊ฐํ๊ธฐ
df
df['b'] = 0
df
a = df[df['a] < 2]
a
df['b'][a.index] = '2 ๋ฏธ๋ง'
df
a = df[(df['a'] >= 2) & (df['a'] < 4)]
a
df['b'][a.index] = '4 ๋ฏธ๋ง'
pd.set_option('mode.chained_assignment', None)
df['b'][a.index] = '4 ๋ฏธ๋ง'
df
a = df[df['a'] >= 4
df['b'][a.index] = '4 ์ด์'
df
1. ํจ์ + apply ๋ฅผ ์ด์ฉํ ํด๊ฒฐ
- apply()
- ๋ฐ์ดํฐํ๋ ์์ input์ผ๋ก ๋ฐ๋ ํจ์ ์์ฑ
- ๋ฐ์ํ๊ณ ์ถ์ column ์ด๋ฆ์ ๊ฐ์ ธ์ ์ ์ฉํ๊ณ ์ถ์ ํจ์ ๋ด์ฉ ์์ฑ
- ์ํ๋ df์ apply ํจ์๋ก ์ ์ฉํ๊ณ ์์์ ์์ฑํ ํจ์ ์ ์ฉ
def case_function(x):
if x < 2:
return '2 ๋ฏธ๋ง'
elif x < 4:
return '4 ๋ฏธ๋ง'
else:
return '4 ์ด์'
df['c'] = df['a'].apply(case_function)
df
-๋ฌธ์ : a ๊ฐ 1 ์ด๋ฉด 'one', 2 ์ด๋ฉด 'two', 3 ์ด๋ฉด 'three', 4 ์ด๋ฉด 'four', 5 ์ด๋ฉด 'five' ๋ฅผ ์ถ๋ ฅํ๋ ์นผ๋ผ d ๋ฅผ ๋ง๋ค๊ธฐ
df
- ์ฌ์ฉ์ ์ ์ํจ์๋ฅผ ์ด์ฉํ ํด๊ฒฐ๋ฐฉ๋ฒ
def function(x):
if x == 1:
return 'one'
elif x == 2:
return 'two'
elif x == 3:
return 'three'
elif x == 4:
return 'four'
elif x == 5:
return 'five'
df['d'] = df['a'].apply(function)
df
2. map์ ์ด์ฉํ ํด๊ฒฐ ๋ฐฉ๋ฒ
- map() : ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ค๋ฅธ ํํ๋ก ๋ณํํ๊ธฐ ์ํด์ ์ฌ์ฉ. ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ list๋ tuple์ ๋์์ผ๋ก ์ฃผ๋ก ์ฌ์ฉํ๋ ํจ์
a = { 1 : 'one', 2 : 'two', 3 : 'three', 4 : 'four', 5 : 'five'}
df['e'] = df['a'].map(a)
df
๋๊ธ