상세 컨텐츠

본문 제목

Pandas Filtering 속도 향상 ( Conditional Selection Speed Up)

개발/python-속도향상(optimization)

by Matthew0633 2022. 5. 17. 23:32

본문

실험 데이터 개수 : 약 160만개

단일값 검색 성능 비교

단순히 pd.series 를 사용한 indexing 의 처리 시간보다, numpy 문법을 사용했을 때 시간이 단축되었고, groupby 를 통해 key-value를 사용한 방법에서는 더 큰 시간 단축을 경험했다

기존 코드 : 2.6초 소요

for code in item_codes:
  ...
  item_info = train_data[train_data['item_code'] == code] # 2.6 초
  ...

대안 1: numpy 배열 사용 ( 2.4초 소요, 0.2초 감소, 7.7% 향상)

for code in item_codes:
  ...
  item_info = train_data[train_data['item_code'].values == code]
  ...

대안 2: groupby 사용 ( 0.7초 소요, 0.9초 감소, 73% 향상)

grouped = train_data.groupby('item_code')

for code in tqdm(item_codes):
  ...
  single = grouped.get_group(code)
  ...

범위 검색 성능 비교

만약 색인 시, 단일값과 같은 데이터를 찾는 것이 아닌, 특정 값들 중 하나에 포함되는 데이터를 찾는 경우에도 대안이 있다

일반적으로 isin() 을 사용하는데 아래와 같이 np.in1d 를 통해 numpy 배열을 사용할 경우 매우 큰 성능 차이를 경험했다

# 범위 검색 : 일반적인 isin() 사용
soldout = [1132, 2832, 4930]
for code in item_codes:
  ...
  soldout_info = train_data[train_data['item_code'].isin(soldout)] 
  ...
# 범위 검색 : np.in1d() 로 numpy 배열 사용 (속도향상)
soldout = [1132, 2832, 4930]
for code in item_codes:
  ...
  soldout_info = train_data[np.in1d(train_data['item_code'].values, soldout)] 
  ...

관련글 더보기

댓글 영역