[Python] lambda
lambda ν¨μλ λ°μ΄ν°λ₯Ό νΈλ€λ§ νκΈ° μν΄ pandasμ κ΄λ ¨λ map, apply λ±κ³Ό ν¨κ» μ μ©νκ² μ°μΈλ€.
def ν€μλλ‘ ν¨μλ₯Ό μ μν΄μ μ¬μ©νλ κ² λν κ°λ₯νμ§λ§ κ°λ¨ν μ μ²λ¦¬λ₯Ό μν΄μ 1νμ© ν¨μμΈ lambda ν¨μλ₯Ό μ£Όλ‘ μ¬μ©νλ€.
μΌλ°μ μΈ ν¨μμ lambda ν¨μμ λΉκ΅
μΌλ°μ μΈ def ν€μλλ‘ μμ±νλ ν¨μλ μλμ κ°λ€.
In [2]:
def plus(left, right):
result = left + right
return result
plus(10, 20)
Out[2]:
30
μ΄λ²μλ κ°μ ν¨μλ₯Ό lambda ν¨μλ₯Ό μ΄μ©ν΄μ λ§λ€μ΄λ³΄μ
In [6]:
f = lambda x, y:x + y
f(10, 20)
Out[6]:
30
μμ κ°μ΄ lambdaμ λ§€κ°λ³μλ₯Ό μ§μ νκ³ :(μ½λ‘ ) λ€ λ°νκ°μΌλ‘ μ¬μ©ν κ³μ°μμ μ§μ νλ€.
κ·Έλ¦¬κ³ lambdaμ νΉμ§ μ€ νλλ νΉμ λ³μμ ν λΉν΄μ μ¬μ©ν΄μΌνλ€. μ΄λ¬ν μ΄μ λ‘ lambda ν¨μκ° μ΅λͺ ν¨μλ‘ λΆλ¦¬κΈ°λ νλ€.
μλμ κ·Έλ¦Όμ λ³΄κ³ μΌλ° ν¨μμ lambda ν¨μμ μ°¨μ΄λ₯Ό μ΄ν΄νμ.
μ°Έκ³ ) μ½λ©λμ₯
lambda ννμ μ체λ₯Ό νΈμΆ
μμ μ€λͺ μμ lambda ν¨μλ νΉμ λ³μλ₯Ό μ΄μ©ν΄μ μ¬μ©ν΄μΌ νλ€κ³ μ€λͺ νλ€. νμ§λ§ lambda ννμ κ·Έ μμ²΄λ‘ μ¬μ©νλ λ°©λ²μ΄ μμ§ μλ€. κ·Έ λ°©λ²μ λ°λ‘ κ΄νΈλ₯Ό μ΄μ©νλ κ²μ΄λ€.
In [9]:
# 5μ μ κ³±μ ꡬν¨γ
(lambda x: x**2)(5)
Out[9]:
25
lambda ννμ μμμ λ³μ μμ±μ λΆκ°λ₯νλ€
In [10]:
(lambda x: y = 10, x + y)(1)
File "<ipython-input-10-a9403626418d>", line 1
(lambda x: y = 10, x + y)(1)
^
SyntaxError: invalid syntax
νμ§λ§ lambda ννμ λ°μ μλ λ³μμ μ¬μ©μ κ°λ₯νλ€. μλμ μμλ‘ μ΄ν΄ν΄λ³΄μ
In [12]:
# μ΅μ’
μ μΌλ‘ lambda ννμμλ xμ 5κ° μ
λ ₯, yμ 10μ΄ μ
λ ₯λλ€.
y = 10
(lambda x: x + y)(5)
Out[12]:
15
lambda ν¨μ μμ
In [16]:
# xμ yλ₯Ό λνλ lambda ν¨μμ
(lambda x, y: x+y)(10, 20)
Out[16]:
30
In [18]:
# λλ¬Έμλ‘ λ§λλ lamba ν¨μμ
(lambda x: x.upper())('abc')
Out[18]:
'ABC'
In [19]:
# μλ¬Έμλ‘ λ§λλ lambda ν¨μμ
(lambda x: x.lower())('ABC')
Out[19]:
'abc'
- lambda μμμ ifλ¬Έμ λ°λμ if elseλ₯Ό λͺ μ
In [30]:
# μ§μλ©΄ μ κ³±, μλλ©΄ κ·Έλλ‘ μ μ§
f = lambda x: x**2 if x % 2 == 0 else x
print(f(10))
print(f(5))
100
5
In [31]:
# strνμ΄λ©΄ μλ¬Έμλ‘ μλλ©΄ κ·Έλλ‘ μ μ§
f = lambda x: x.lower() if type(x)=='str' else x
print(f('ABC'))
print(f(10))
ABC
10
filter
In [36]:
# filterν¨μμ lambda μμ μ΄μ©ν΄ μ§μμΈ λ°μ΄ν°λ₯Ό μΆμΆνμμ€
arr = np.arange(10)
result = filter(lambda x: x%2==0, arr)
print(list(result))
[0, 2, 4, 6, 8]
map
- map ν¨μλ Seriesλ₯Ό λμμΌλ‘ ν¨μ μ μ©
In [42]:
import pandas as pd
df = pd.DataFrame({"age":[30,25,25,12,40],
"height":[178,180,160,140,176],
"weight":[80,100,55,40,70]})
df
Out[42]:
ageheightweight01234
30 | 178 | 80 |
---|---|---|
25 | 180 | 100 |
25 | 160 | 55 |
12 | 140 | 40 |
40 | 176 | 70 |
In [43]:
# map ν¨μμ lambda ν¨μμμ μ΄μ©ν΄ weightλ₯Ό pundλ‘ λ³ννμμ€ * 2.205
df['weight'] = df['weight'].map(lambda x: x*2.205)
df
Out[43]:
ageheightweight01234
30 | 178 | 176.400 |
---|---|---|
25 | 180 | 220.500 |
25 | 160 | 121.275 |
12 | 140 | 88.200 |
40 | 176 | 154.350 |
apply
- apply ν¨μλ μ 체 Series(컬λΌ)μ λμμΌλ‘ ν¨μλ₯Ό μ μ©ν©λλ€.
In [46]:
# νμ λ°μ΄ν°νλ μμ μ 체 컬λΌμ μ΅λκ° - μ΅μκ°μ κ³μ°νμμ€
df.apply(lambda x: x.max() - x.min())
Out[46]:
age 28.0
height 40.0
weight 132.3
dtype: float64
applymap
- applymap ν¨μλ DFμ λͺ¨λ elementμ λν΄ ν¨μλ₯Ό μ μ©ν©λλ€. (axis μΈμ X)
In [47]:
# λ°μ΄ν°νλ μμ μ 체 elementμ λν΄ μμλ‘ λ³κ²½νμμ€
df.applymap(lambda x: -x)
Out[47]:
ageheightweight01234
-30 | -178 | -176.400 |
---|---|---|
-25 | -180 | -220.500 |
-25 | -160 | -121.275 |
-12 | -140 | -88.200 |
-40 | -176 | -154.350 |
In [ ]: