¿Por qué la tabla de la IA no suma lo mismo que tu archivo?
Cuadra el total de una tabla que te dio la IA contra el archivo y encuentra las filas que se quedaron fuera.
Curso gratis. Tu Maestro, una IA, .
Imagina que le pides a tu asistente "las ventas de marzo por sucursal" y te responde con una tabla:
| Sucursal | Importe |
|---|---|
| Centro | $22,228 |
| Chapalita | $44,084 |
| Tlaquepaque | $19,019 |
| Tonalá | $4,713 |
| Zapopan | $27,644 |
Cada renglón está bien calculado. Ahora súmalos: $117,688. En la página de la calculadora sumaste la columna importe completa y te dio $118,196. Faltan $508. Ninguna sucursal está mal, y aun así la tabla no cuadra con el archivo.
Esta es la segunda forma en que algo se queda fuera: filas que estaban en el archivo y no llegaron a la tabla final. Pasa por dos razones. Una es una celda vacía justo en la columna con la que se agrupa. La otra es un filtro que la IA aplicó sin decirlo. Las dos se descubren con la misma costumbre: comparar el total de la respuesta contra el total del archivo. En contabilidad a eso se le llama Término del glosario, y no necesitas ser contadora ni contador para hacerla.
Primero, un calentamiento con cuatro filas.
Cuatro ventas, y una no tiene sucursal. Escribe qué crees que imprime cada programa, y por qué, antes de ejecutarlo.
Cuatro ventas, y una no tiene sucursal. Escribe qué crees que imprime cada programa, y por qué, antes de ejecutarlo.
El total y la suma por sucursal
Ejemplo 1 de 2
import pandas as pd
tabla = pd.DataFrame({
"sucursal": ["Centro", "Centro", None, "Zapopan"],
"importe": [100, 200, 50, 300],
})
print(tabla["importe"].sum())
print(tabla.groupby("sucursal")["importe"].sum().sum())
Adivinar está bien: se guarda tal como la escribiste para compararla. Solo tú y tu Maestro ven tus predicciones.
Ejemplo 2 de 2, se abre cuando expliques este
Por qué se pierden
groupby es la versión en pandas de una tabla dinámica: junta las filas por el valor de una columna y calcula algo para cada grupo. Lo que no te dice es que, de entrada, se salta las filas donde esa columna está vacía. La documentación de pandas lo explica en su parámetro dropna: vale True si no dices otra cosa, y los grupos con valor vacío se eliminan. Si el código de la IA usa groupby tal como viene, esas filas se pierden sin aviso.
En el archivo de la ferretería, el ticket T-1058 tiene tres productos y ninguna sucursal capturada. Suma $508. Por eso la tabla por sucursal no cuadra. ¿Por qué groupby se salta las filas sin sucursal?
Perder esas filas no siempre es un error. Si te piden comparar sucursales, un ticket sin sucursal no ayuda a comparar. Lo que no puedes hacer es reportar la tabla como si fuera todo marzo. La frase honesta es algo como "ventas por sucursal; $508 de un ticket sin sucursal no aparecen".
total = data["importe"].sum() # el total del archivo
por_sucursal = data.groupby("sucursal")["importe"].sum() # la tabla de la IA
print(total - por_sucursal.sum()) # lo que no llegó
data[data["sucursal"].isna()] # las filas sin sucursal
data.groupby("sucursal", dropna=False)["importe"].sum() # la tabla con un renglón para las vacíasSaca el total del archivo
Suma la columna completa, sin filtros ni agrupaciones:
data["importe"].sum().Suma la respuesta
Suma los renglones de la tabla que te dio la IA, a mano o con
.sum().Mira la diferencia
Si da cero, cuadra. Si no, algo se quedó fuera y ya sabes cuánto.
Busca las filas
Primero, celdas vacías en la columna con la que se agrupó. Después, filtros: estados, fechas, categorías.
El filtro que nadie anunció
Ahora imagina otra respuesta, a la pregunta "¿cuánto vendimos en marzo?": "En marzo vendiste $108,567". No es $118,196. Esta vez no faltan sucursales: la IA dejó fuera las filas con estado igual a cancelado, 27 líneas de 11 tickets. Puede que sea justo lo que querías, porque una venta cancelada no es una venta. Pero la IA lo decidió por ti y no lo dijo.
Un filtro es una decisión, no un detalle técnico. Por eso, cuando un número no te cuadra, la pregunta que más rinde es "¿filtraste algo?". Si la IA te mostró el código, busca las líneas con corchetes y ==, como la del filtro de Zapopan en el módulo 1. ¿Cómo encuentro un filtro escondido en el código que me dio la IA?
Inténtalo
El código saca el total del archivo, la suma por sucursal y la diferencia. Ejecútalo con Ejecutar y confirma los $508. Después, en las líneas de tu turno, muestra las filas sin sucursal y calcula el total de las ventas pagadas, para encontrar los $108,567 de la segunda respuesta.
Ejecuta el código y confirma que faltan 508.0. Luego imprime las filas sin sucursal (columnas ticket, producto e importe) y el total de las filas con estado "pagado". Terminas cuando ves las tres filas del ticket T-1058 y el total pagado 108567.0.
Ejecuta el código y confirma que faltan 508.0. Luego imprime las filas sin sucursal (columnas ticket, producto e importe) y el total de las filas con estado "pagado". Terminas cuando ves las tres filas del ticket T-1058 y el total pagado 108567.0.
Ejecuta tu código para ver lo que imprime y el valor de su última expresión. Cada ejecución empieza de nuevo. Ctrl+Enter ejecuta tu código. Tab agrega sangría; para salir del editor, presiona Escape y luego Tab.
Listo para ejecutar tu código.
Ejecuta tu código para ver su salida aquí.
Datos: ventas-marzo, 312 filas
Enter guarda una celda y Escape la deja como estaba. Deja una celda vacía para un valor faltante.
| Fila | Quitar | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | |||||||||||
| 2 | |||||||||||
| 3 | |||||||||||
| 4 | |||||||||||
| 5 | |||||||||||
| 6 | |||||||||||
| 7 | |||||||||||
| 8 | |||||||||||
| 9 | |||||||||||
| 10 | |||||||||||
| 11 | |||||||||||
| 12 | |||||||||||
| 13 | |||||||||||
| 14 | |||||||||||
| 15 | |||||||||||
| 16 | |||||||||||
| 17 | |||||||||||
| 18 | |||||||||||
| 19 | |||||||||||
| 20 |