Cargando tu progreso…

Pokédex Codex

pandas: Agrupar y combinar

META

🎯 Meta: sacar resúmenes por grupo (ej: nivel promedio por tipo) y combinar dos tablas. Acá pandas se vuelve mágico.

Tenés una Pokédex enorme. No querés mirar fila por fila: querés resúmenes. ¿Cuántos hay de cada tipo? ¿Qué tipo tiene el nivel promedio más alto? Para eso está groupby.

🔢 Contar categorías: value_counts

import pandas as pd
pokedex = pd.DataFrame({
    "nombre": ["Pikachu", "Raichu", "Charizard", "Bulbasaur", "Ivysaur"],
    "tipo":   ["Eléctrico", "Eléctrico", "Fuego", "Planta", "Planta"],
})
print(pokedex["tipo"].value_counts())   # cuántos de cada tipo

🧮 groupby: resumir por grupo

groupby("tipo") arma grupos por tipo; después elegís una columna y una operación.

import pandas as pd
pokedex = pd.DataFrame({
    "tipo":  ["Eléctrico", "Eléctrico", "Fuego", "Planta", "Planta"],
    "nivel": [25, 40, 90, 12, 30],
    "hp":    [35, 60, 78, 45, 60],
})
print(pokedex.groupby("tipo")["nivel"].mean())   # nivel promedio por tipo
print(pokedex.groupby("tipo")["hp"].sum())       # hp total por tipo
print(pokedex.groupby("tipo")["nivel"].max())    # nivel máximo por tipo
TIP

💡 El patrón mental: agrupá por (groupby), mirá esta columna (["nivel"]), calculá esto (.mean()). Cambiá las 3 piezas según tu pregunta.

P: ¿Qué devuelve `pokedex.groupby("tipo")["nivel"].mean()`?
- El nivel promedio de todos los Pokémon.
+ El nivel promedio de los Pokémon de cada tipo.
- La cantidad de Pokémon por tipo.
> `groupby("tipo")` agrupa las filas por tipo; `["nivel"].mean()` calcula el promedio del nivel dentro de cada grupo.

🏆 El tipo más común

import pandas as pd
pokedex = pd.DataFrame({"tipo": ["Fuego", "Agua", "Agua", "Planta"]})
print(pokedex["tipo"].value_counts().idxmax())   # -> Agua
P: ¿Para qué sirve `pd.merge(pokemon, debilidades, on="tipo")`?
- Suma las columnas de ambas tablas.
- Combina solo las filas duplicadas.
+ Une las dos tablas por la columna `"tipo"`, agregando las columnas de cada una.
> `merge` es como cruzar dos Pokédex: junta las filas que coinciden en la columna indicada (`on`), igual que un JOIN de SQL.

🔗 Combinar dos tablas: merge

Tenés una tabla de Pokémon y otra de debilidades por tipo. Las unís por la columna en común (tipo).

import pandas as pd

pokemon = pd.DataFrame({"nombre": ["Charizard", "Blastoise"], "tipo": ["Fuego", "Agua"]})
debilidades = pd.DataFrame({"tipo": ["Fuego", "Agua"], "debil_a": ["Agua", "Planta"]})

print(pd.merge(pokemon, debilidades, on="tipo"))
TIP

💡 merge es como cruzar dos Pokédex que comparten una columna. Es la base de juntar datos de distintas fuentes.

📝 Resumen

CosaPara qué
df["col"].value_counts()contar cuántos de cada categoría
df.groupby("col")["otra"].mean()promedio por grupo
.sum(), .max(), .min(), .count()otras operaciones por grupo
df["col"].value_counts().idxmax()la categoría más común
pd.merge(a, b, on="col")combinar dos tablas por una columna

➡️ ¿Y ahora qué?

Practicá con los ejercicios de este tema. 💪

ÁNIMO

“Mil Pokémon, una pregunta, una respuesta. Eso es groupby.”