언피벗
언피벗 (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를 가져요. 아래 예시는 C와 D 칼럼을 언피벗하고, A와 B를 인덱스 칼럼(행마다 유지되는 식별자)으로 남깁니다.
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) 문서를 참고하세요.