pl_sales_report.py en Python
Armar un resumen mensual de ventas desde transacciones crudas.
"""Resume las ventas mensuales de transacciones crudas con Polars."""
import polars as pl
def armar_reporte(transacciones):
df = pl.DataFrame(transacciones)
return (
df
.with_columns(
(pl.col("units") * pl.col("price")).alias("revenue"),
pl.col("date").str.slice(0, 7).alias("month"),
)
.group_by("month", "product")
.agg(
pl.col("revenue").sum().round(2).alias("revenue"),
pl.col("units").sum().alias("units"),
)
.sort("revenue", descending=True)
)
def principal():
transacciones = [
{"date": "2026-06-03", "product": "kea", "units": 4, "price": 9.5},
{"date": "2026-06-19", "product": "tui", "units": 2, "price": 12.0},
{"date": "2026-07-02", "product": "kea", "units": 7, "price": 9.5},
{"date": "2026-07-21", "product": "tui", "units": 5, "price": 12.0},
]
reporte = armar_reporte(transacciones)
print(reporte)
print(f"ingreso total: {reporte['revenue'].sum():.2f}")
if __name__ == "__main__":
principal()
Cómo funciona
- Expresiones derivan el ingreso y una columna de mes.
group_byagrega el ingreso y las unidades.- El reporte se ordena por ingreso y lo totaliza.
Palabras clave y builtins usados aquí
asdefifprintreturn
El intento, en números
- Líneas
- 35
- Caracteres a escribir
- 915
- Tokens
- 320
- Ritmo de tres estrellas
- 115 tpm
Al ritmo de tres estrellas de 115 tokens por minuto, este intento toma unos 167 segundos.
Paso 1 de 2 en Bis; paso 31 de 32 en Polars.