polars.LazyFrame.melt#
- LazyFrame.melt(
 - id_vars: ColumnNameOrSelector | Sequence[ColumnNameOrSelector] | None = None,
 - value_vars: ColumnNameOrSelector | Sequence[ColumnNameOrSelector] | None = None,
 - variable_name: str | None = None,
 - value_name: str | None = None,
 - *,
 - streamable: bool = True,
 Unpivot a DataFrame from wide to long format.
Optionally leaves identifiers set.
This function is useful to massage a DataFrame into a format where one or more columns are identifier variables (id_vars) while all other columns, considered measured variables (value_vars), are “unpivoted” to the row axis leaving just two non-identifier columns, ‘variable’ and ‘value’.
- Parameters:
 - id_vars
 Column(s) or selector(s) to use as identifier variables.
- value_vars
 Column(s) or selector(s) to use as values variables; if
value_varsis empty all columns that are not inid_varswill be used.- variable_name
 Name to give to the
variablecolumn. Defaults to “variable”- value_name
 Name to give to the
valuecolumn. Defaults to “value”- streamable
 Allow this node to run in the streaming engine. If this runs in streaming, the output of the melt operation will not have a stable ordering.
Examples
>>> lf = pl.LazyFrame( ... { ... "a": ["x", "y", "z"], ... "b": [1, 3, 5], ... "c": [2, 4, 6], ... } ... ) >>> import polars.selectors as cs >>> lf.melt(id_vars="a", value_vars=cs.numeric()).collect() shape: (6, 3) ┌─────┬──────────┬───────┐ │ a ┆ variable ┆ value │ │ --- ┆ --- ┆ --- │ │ str ┆ str ┆ i64 │ ╞═════╪══════════╪═══════╡ │ x ┆ b ┆ 1 │ │ y ┆ b ┆ 3 │ │ z ┆ b ┆ 5 │ │ x ┆ c ┆ 2 │ │ y ┆ c ┆ 4 │ │ z ┆ c ┆ 6 │ └─────┴──────────┴───────┘