---
name: melt
kind: function
lang: py
domain: datascience
version: "1.0.0"
purity: pure
signature: "def melt(rows: list[dict], id_vars: list[str], value_vars: list[str] | None = None, var_name: str = 'variable', value_name: str = 'value') -> list[dict]"
description: "Inversa de pivot. Convierte columnas en filas (formato largo). Cada combinacion de id_vars + value_var genera una fila. Si value_vars es None, derrite todas las columnas no-id."
tags: [datascience, tabular, melt, unpivot, transform, python, pendiente-usar]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: []
params:
  - name: rows
    desc: "lista de dicts en formato ancho (ej: [{'region': 'US', 'q1': 10, 'q2': 20}])"
  - name: id_vars
    desc: "lista de columnas a mantener como identificadores (ej: ['region']). No se derriten."
  - name: value_vars
    desc: "lista de columnas a derretir (ej: ['q1', 'q2']). Si None, derrite todas excepto id_vars."
  - name: var_name
    desc: "nombre de la columna que contendra los nombres de columnas derretidas (defecto: 'variable')"
  - name: value_name
    desc: "nombre de la columna que contendra los valores (defecto: 'value')"
output: "lista de dicts en formato largo, donde cada id_var + value_var genera una fila"
tested: true
tests:
  - "Melt basico"
  - "Multiples id_vars"
  - "value_vars None derrite todas las columnas no-id"
  - "Fila con campo faltante en value_vars"
test_file_path: "python/functions/datascience/melt_test.py"
file_path: "python/functions/datascience/melt.py"
---

## Ejemplo

```python
rows = [{"region": "US", "q1": 10, "q2": 20}]
melt(rows, id_vars=["region"], value_vars=["q1", "q2"])
# [{"region": "US", "variable": "q1", "value": 10},
#  {"region": "US", "variable": "q2", "value": 20}]
```

## Notas

Funcion pura sin dependencias externas.
Si un campo de value_vars no existe en la fila, su valor sera None.
El parametro value_vars=None es util cuando se desconoce el schema exacto.
