brunch

Polars #07

#Pivot #Melt #Polars

by 유윤식

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() 를 사용해야할 시나리오 몇가지만 기억해두면 될 것 같다.

keyword
작가의 이전글Python: contextlib; with