Skip to content
Empieza gratis

¿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

example.py
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

Haz tu predicción

Una regla, escrita en el código

El patrón completo para la hoja de ventas queda así:

Python
# 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")
La regla va en un comentario, el orden va explícito y la bitácora cuenta lo que se fue.

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 captura ya viene en orden, así que hoy keep="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_values cuesta 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.

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.

Los datos del ejercicio, "ventas-cooperativa". Tus cambios corren con tu código.
FilaQuitar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Página 1 de 3

Ejecútalo tú

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.

Comprueba lo que sabes: Un compañero escribe `ventas.drop_duplicates(subset="folio", keep="last")` y te dice que ya aplica la regla de "vale la captura más reciente". La hoja que recibió venía ordenada por cliente. ¿Qué le dices?