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>
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user