¿Cómo me quedo con la última captura de cada folio en pandas?
Elige qué copia se queda con una regla escrita, ordena antes de quitar, y resuelve en código los repetidos que no tienen una regla.
Curso gratis. Tu Maestro, una IA, .
Con el folio como llave sabes qué renglones son la misma venta. Falta decidir cuál copia se queda. En la tabla de la página anterior, drop_duplicates(subset="folio") se quedó con la V-4 de 5 kilos, la captura equivocada, porque por omisión guarda la primera que encuentra.
En la cooperativa, Marisol confirma la regla: cuando un folio aparece dos veces, la captura más reciente es la corrección y es la que vale. En pandas eso suena a keep="last". Predice si alcanza.
keep="last" sin ordenar
Ejemplo 1 de 2
import pandas as pd
ventas = pd.DataFrame({
"captura": [6, 4, 1],
"folio": ["V-4", "V-4", "V-1"],
"kilos": [50, 5, 40],
})
print(ventas.drop_duplicates(subset="folio", keep="last"))
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
Una regla, escrita en el código
El patrón completo para la hoja de ventas queda así:
# Regla de Marisol: si un folio se repite, vale la captura más reciente.
antes = len(ventas)
ventas = (ventas
.sort_values("captura")
.drop_duplicates(subset="folio", keep="last"))
anota("folios repetidos", antes, len(ventas), "queda la última captura de cada folio")Tres cosas hacen que este paso se pueda defender:
- La regla está escrita. Quien lea el código sabe por qué se quedó una copia y no la otra, y sabe a quién preguntarle si la regla cambia.
- El orden no depende de la suerte. En la hoja de marzo la columna
capturaya viene en orden, así que hoykeep="last"funcionaría sin ordenar. Pero si en abril alguien ordena la hoja por cliente antes de mandártela, el mismo código se quedaría con las copias equivocadas sin ningún error.sort_valuescuesta una línea y quita esa posibilidad. - La bitácora cuenta. El paso debe bajar de 60 a 58, exactamente los 2 folios repetidos del inventario. Si baja más o menos, la llave o el orden no son los que crees.
¿Tus datos tienen una fecha de modificación o un número de versión para decidir cuál copia vale? Platícalo con tu Maestro.
Cuando no hay regla: decide caso por caso, en código
En el padrón de socios no hay columna captura. Juana Martínez Cruz aparece como 1008, sin teléfono, y como 1029, con teléfono. Marisol confirma que es la misma persona, que se registró dos veces, y que su número de socia es el 1008. No hay una regla general que aplicar: es una decisión sobre un caso. Aun así, no se arregla a mano en la hoja. Se escribe en el código, con el caso nombrado, para que la próxima vez que corras el script la decisión se aplique sola. Abre los pasos uno por uno.
Juana, registrada dos veces
Ejemplo resuelto · 4 pasos
El padrón tiene a Juana Martínez Cruz como 1008 (sin teléfono) y 1029 (con teléfono). Marisol confirma que es la misma socia y que su número es el 1008. Quieres un solo renglón, con su teléfono, y que la decisión quede en el código.
Piensa el siguiente paso por tu cuenta y luego ábrelo para comparar.
Inténtalo
Ahora la hoja de ventas completa. Quita los folios repetidos con la regla de Marisol y comprueba las ventas que importan. Si no estás seguro de qué renglón debió quedarse, pregúntale a tu Maestro.
Ordena por captura, quédate con la última captura de cada folio y cuenta las filas antes y después. Después imprime las ventas V-0017, V-0031, V-0040 y V-0041. Terminaste cuando quedan 58 ventas, V-0031 tiene 53 kilos y V-0040 y V-0041 siguen las dos.
Ordena por captura, quédate con la última captura de cada folio y cuenta las filas antes y después. Después imprime las ventas V-0017, V-0031, V-0040 y V-0041. Terminaste cuando quedan 58 ventas, V-0031 tiene 53 kilos y V-0040 y V-0041 siguen las dos.
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-cooperativa, 60 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 |
El código de arriba ya deja 58 ventas, y aun así está mal: se queda con la V-0031 de 5 kilos, la captura 32. El número de filas no te avisa de esto; lo que te avisa es mirar las ventas que conoces. Con la regla completa, V-0031 queda con 53 kilos (captura 36), V-0017 con su captura 18, y los dos pedidos de Hotel Mirador siguen ahí.
Guarda este hábito para el resto del curso: después de quitar duplicados, además de contar, busca dos o tres casos que conoces de memoria y mira con qué copia se quedaron. Cuesta una línea de código y atrapa errores que el conteo no ve.