Lastest Update: 20250413

1. 문제상황

  1. index는 시간순서대로 정렬되어 있음.
  2. 데이터는 float64 dtype
  3. 데이터의 행는 100_000개 이상 1_000_000개 이하 라고 가정
  4. 데이터의 컬럼은 10개 이상 40개이하 라고 가정
  5. 총 데이터 포인트의 갯수는 1_000_000개에서 40_000_000개 라고 가정

2. 가장 병목 구간은 ? Indexing, Rolling

우리가 사용하는 Indexing 방법(직관적)

우리가 사용하는 Indexing 방법(직관적)

def df_slice_linear_indexing(df, dt_from, dt_to, cols: List[str] | None = None):
	return df.loc[dt_from:dt_to, :] if cols is None else df.loc[dt_from:dt_to, cols]

index가 datetime 이기 때문에 O(1) 접근은 불가능하다. 어쩔수 없이 순회를 하면서 데이터를 접근해야 하는데 O(n) 이라는 시간이 필연적이다.

하루에 수십억건 데이터를 처리해야하는 HFT 리서치 시스템의 특성상 파이썬의 for loop를 사용하는 방법은 너무 느리다.