언피벗

언피벗 (Unpivots)

피벗이 넓은 데이터프레임을 만든다면, 언피벗(unpivot)은 정반대 작업을 해요. 넓은(wide) 형식의 데이터프레임을 긴(long) 형식으로 재구성해서, 여러 칼럼이 칼럼 이름(variable)과 값(value)의 형태로 행으로 펼쳐지게 하죠. 통계 분석이나 시각화 도구가 긴 형식을 선호하는 경우가 많아서, 실제로 자주 쓰이는 변형이에요.

출처: 공식문서

언피벗은 데이터프레임을 넓은 형식(wide)에서 긴 형식(long)으로 펼쳐줍니다.

데이터셋 (Dataset)

import polars as pl

df = pl.DataFrame(
    {
        "A": ["a", "b", "a"],
        "B": [1, 3, 5],
        "C": [10, 11, 12],
        "D": [2, 4, 6],
    }
)
print(df)
shape: (3, 4)
┌─────┬─────┬─────┬─────┐
│ A   ┆ B   ┆ C   ┆ D   │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╪═════╡
│ a   ┆ 1   ┆ 10  ┆ 2   │
│ b   ┆ 3   ┆ 11  ┆ 4   │
│ a   ┆ 5   ┆ 12  ┆ 6   │
└─────┴─────┴─────┴─────┘

즉시 + 지연 (Eager + lazy)

Eager(즉시)와 lazy(지연)는 같은 API를 가져요. 아래 예시는 CD 칼럼을 언피벗하고, AB를 인덱스 칼럼(행마다 유지되는 식별자)으로 남깁니다.

out = df.unpivot(["C", "D"], index=["A", "B"])
print(out)
shape: (6, 4)
┌─────┬─────┬──────────┬───────┐
│ A   ┆ B   ┆ variable ┆ value │
│ --- ┆ --- ┆ ---      ┆ ---   │
│ str ┆ i64 ┆ str      ┆ i64   │
╞═════╪═════╪══════════╪═══════╡
│ a   ┆ 1   ┆ C        ┆ 10    │
│ b   ┆ 3   ┆ C        ┆ 11    │
│ a   ┆ 5   ┆ C        ┆ 12    │
│ a   ┆ 1   ┆ D        ┆ 2     │
│ b   ┆ 3   ┆ D        ┆ 4     │
│ a   ┆ 5   ┆ D        ┆ 6     │
└─────┴─────┴──────────┴───────┘

언피벗된 칼럼(C, D) 각각에 대해 원래 행의 인덱스 값(A, B)이 반복되면서, 칼럼 이름은 variable에, 그 값은 value에 담겨요.

더 알아보기 (Learn more)

  • 언피벗의 반대 방향으로, 긴 데이터를 넓은 형식으로 재구성하고 싶다면 피벗 (Pivots) 문서를 참고하세요.