Skip to main content
중간 변수를 과도하게 늘리면 전처리 로직이 끊기고 디버깅이 어려워집니다. 메서드 체이닝과 pipe를 사용하면 변환 흐름을 한 눈에 읽을 수 있습니다.

체이닝 기본

out = (
    df
    .dropna(subset=["user_id", "amount"])
    .assign(amount=lambda x: x["amount"].clip(lower=0))
    .query("amount >= 1000")
    .groupby("region", as_index=False)
    .agg(total_amount=("amount", "sum"), n=("user_id", "nunique"))
    .sort_values("total_amount", ascending=False)
)

pipe로 도메인 함수 분리

def add_tier(frame: pd.DataFrame) -> pd.DataFrame:
    return frame.assign(
        tier=pd.cut(frame["amount"], bins=[0, 5000, 15000, 1e9], labels=["low", "mid", "high"])
    )

def keep_recent(frame: pd.DataFrame, days: int) -> pd.DataFrame:
    cutoff = frame["ts"].max() - pd.Timedelta(days=days)
    return frame.loc[frame["ts"] >= cutoff]

result = (
    df
    .pipe(add_tier)
    .pipe(keep_recent, days=30)
)

설계 기준

  • 체인은 6~8단계를 넘기면 함수 분리(pipe)를 고려합니다.
  • 각 함수는 입력/출력 스키마를 유지하는 순수 변환으로 구성합니다.
  • 중간 결과 검증은 .pipe(debug_fn) 패턴으로 삽입합니다.

이어서 볼 문서