파이썬 dataframe 각 row에 function을 apply하는 방법에 대하여.
dataframe을 다루다보면 각 행(row)에 대해 특정 값에 대한 결과를 얻거나 과정을 수행하고 싶을 때가 있다.
이럴때 가장먼저 떠오르는것은 pd.iterrows() 였다.
하지만 천만건이 넘어가는 데이터를 다루려 하다보니 iterrows는 너무나 느리다는 것을 알게 되었다.
이를 해결하기 위해 찾아낸 방법이 수행할 작업을 function으로 만들고 각 행에 apply하는 것이다.
간단한 dataframe 을 만들어서 살펴보자.
1 | import pandas as pd |
Name | Age |
---|---|
A | 17 |
B | 20 |
C | 27 |
이름과 성별이 주어진 dataframe이 있을 때 각 행을 살펴보며 어떤 사람이 투표권을 행사할 수 있을지 판단해보려고 한다.
각 행을 입력받아 Age 가 18세 이상이라면 True를 그렇지 않다면 False를 반환하는 함수를 만든뒤 datafrmae에 apply한다.
1 | def vote(row): |
Name | Age | vote |
---|---|---|
A | 17 | False |
B | 20 | True |
C | 27 | True |
위와 같이 각 행의 Age 를 판단해 vote라는 새로운 칼럼을 만들어낸 것을 볼 수 있다.
이와같이 함수를 dataframe에 apply할 때 각 행(row)에 대하여 적용하고 싶다면 df.apply(func, axis=1) 로 axis=1 을 잊지말아야 한다.
위의 예제는 행이 3개라 iterrows로 실습해도 차이를 느낄순 없을것이다. 하지만 데이터 크기가 커질수록 iterrows를 사용하는것은 자제하고 apply를 적용하는 방법을 알아야한다.
apply 외에도 몇가지 다른 방법을 알고 싶다면 참고해보자.