파이썬 apply와 lambda함수의 활용

Updated:

1 minute read

apply 함수

  • 시리즈에 함수를 적용시켜주는 함수
  • 시리즈.apply(함수)
  • for문으로 작성해야하는 코드를 더 간결하게 할 수 있게 해줍니다.
df = pd.read_csv('./datas/test.csv', nrows=10)
df
ID shop_id item_id
0 0 5 5037
1 1 5 5320
2 2 5 5233
3 3 5 5232
4 4 5 5268
5 5 5 5039
6 6 5 5041
7 7 5 5046
8 8 5 5319
9 9 5 5003

조건이 없는 단순 연산일 경우 아래처럼 간단하게 함수 적용이 가능합니다.

df['ID']*2
0     0
1     2
2     4
3     6
4     8
5    10
6    12
7    14
8    16
9    18
Name: ID, dtype: int64
def multi_two(x):
    return x*2

multi_two(df['ID'])
0     0
1     2
2     4
3     6
4     8
5    10
6    12
7    14
8    16
9    18
Name: ID, dtype: int64

같은 연산을 apply로도 가능합니다.

def multi_two(x):
    return x*2

df['ID'].apply(multi_two)
0     0
1     2
2     4
3     6
4     8
5    10
6    12
7    14
8    16
9    18
Name: ID, dtype: int64

하지만 조건부로 데이터에 연산을 적용할 경우, for문이라 apply가 꼭 필요합니다. 데이터 프레임에 인덱스가 짝수일 경우 아이디에 2를 곱해주는 코드를 작성해봅니다.

df = pd.read_csv('./datas/test.csv', nrows=10)

for i in df.index:
    if i%2 == 0:
        df.loc[i,'ID'] = df.loc[i,'ID'] *2
df['ID']
0     0
1     1
2     4
3     3
4     8
5     5
6    12
7     7
8    16
9     9
Name: ID, dtype: int64

apply와 lambda함수를 이용하면 더 간단하게 할 수 있습니다.

df = pd.read_csv('./datas/test.csv', nrows=10)

df['ID'].apply(lambda x: x*2 if x%2==0 else x)
0     0
1     1
2     4
3     3
4     8
5     5
6    12
7     7
8    16
9     9
Name: ID, dtype: int64

Categories:

Updated: