파이썬 apply와 lambda함수의 활용
Updated:
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