brunch

You can make anything
by writing

C.S.Lewis

by 유윤식 Jun 12. 2024

Polars #07

#Pivot #Melt #Polars

Pivot <> Melt.


pivot 을 데이터 프레임의 한 열의 값을 새로운 열로 만드는 함수.


예를 들어,


import polars as pl

import numpy as np


data = {

    "name": ["Alice", "Bob", "David", "Alice", "Bob", "Alice", "Bob", "David"],

    "year": [2020, 2020, 2023, 2021,2022, 2021, 2022, 2022],

    "value": [10, 20, 15, 25, 30, 35, 20, 35]

}


df = pl.DataFrame(data)


이런 데이터가 만들어 졌을 때,

year 컬럼의 값들을 새로운 컬럼으로 만들 수 있는다.



pivot_df = df.pivot(

    values="value",

    index="name",

    columns="year",

    aggregate_function="max",

    maintain_order=True,

    sort_columns=True,

)


위와 같은 결과로 만든 다음에 간단하게 null 처리를 해주면 pivot 은 끝이다.


pivot_df = pivot_df.fill_null(np.NaN)



이제 melt 를 이용해서 undo 시켜보면,


value_vars = [i for i in pivot_df.columns if i != 'name']


melted_df = pivot_df.melt(

    id_vars="name",

    value_vars=value_vars,

    variable_name="year",

    value_name="value"

)


year, value 컬럼 타입만 간단하게 변경해주면 끝이다.


melted_df = melted_df.with_columns([

    pl.col("year").cast(pl.Int64),

    pl.col("value").cast(pl.Int64),

])



pivot(), melt() 를 사용해야할 시나리오 몇가지만 기억해두면 될 것 같다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari