Files
fn_registry/python/functions/datascience/melt.py
T
egutierrez 63a9cb5273 feat: funciones Python datascience, finance, cybersecurity y pipelines
Datascience: aggregate_by_group, deduplicate_entities/relations, detect_drift,
diff_entities/relations, extract_entities/relations_llm, hotness_score, melt,
merge_graphs, pivot, build_entity/relation_schema_prompt.
Finance: avellaneda_stoikov_quotes, generate_gbm_prices, generate_taker_order,
hawkes_intensity + módulo finance.py.
Cybersecurity: envelope_encrypt/decrypt + módulo cybersecurity.py.
Pipelines: extraction_pipeline, monte_carlo_market, run_market_sim.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 17:11:32 +02:00

41 lines
1.3 KiB
Python

"""Melt (unpivot) para datos tabulares list[dict]."""
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]:
"""Convierte columnas en filas (formato largo). Inversa de pivot.
Cada combinacion de id_vars + value_var genera una fila nueva.
Si value_vars es None, se usan todas las columnas que no esten en id_vars.
Args:
rows: Lista de dicts en formato ancho.
id_vars: Columnas que se mantienen como identificadores en cada fila.
value_vars: Columnas a convertir en filas. None = todas las no-id.
var_name: Nombre de la columna que contendra los nombres de variables.
value_name: Nombre de la columna que contendra los valores.
Returns:
Lista de dicts en formato largo con una fila por combinacion id+variable.
"""
result = []
for row in rows:
# Determinar que columnas derretir
if value_vars is None:
vars_to_melt = [k for k in row if k not in id_vars]
else:
vars_to_melt = value_vars
for var in vars_to_melt:
new_row: dict = {k: row.get(k) for k in id_vars}
new_row[var_name] = var
new_row[value_name] = row.get(var)
result.append(new_row)
return result