Agrupación y agregación con pandas

Aprende a dividir un DataFrame de pandas en grupos y resumir cada uno. Agrupa por columnas, claves derivadas y niveles del índice; calcula agregaciones incorporadas, múltiples y personalizadas; añade estadísticos del grupo a cada fila con transform; asigna rangos, filtra y selecciona muestras dentro de los grupos; y utiliza apply para las demás operaciones. Después, agrupa números en intervalos con cut y qcut para realizar análisis por cuantiles y crea tablas dinámicas y tablas de contingencia con totales y porcentajes.

IntermedioUnidad 5 de 8 del curso Curso de Análisis de datos con Python

Lo que aprenderás

  1. Explica el patrón de dividir, aplicar y combinar, crea objetos GroupBy a partir de distintos tipos de claves y controla las etiquetas, el orden y las combinaciones incluidas en el resultado agrupado.
    • Explica el patrón de dividir, aplicar y combinar y el objeto GroupBy
      Describe qué sucede cuando pandas agrupa un DataFrame, inspecciona los grupos que forma y selecciona las columnas que se van a resumir.
    • Agrupa por columnas, arreglos, correspondencias, funciones y niveles del índice
      Elige y combina claves de agrupación, desde una o varias columnas hasta claves derivadas, correspondencias, funciones y niveles del índice.
    • Controla las claves de grupo, el orden y las claves faltantes en los resultados
      Configura los resultados agrupados para seguir trabajando: claves como índice o columnas, salida ordenada, claves faltantes y categorías no utilizadas, y nombres claros.
  2. Reduce cada grupo a valores de resumen mediante agregaciones incorporadas, varias agregaciones en una sola llamada y funciones personalizadas, e interpreta correctamente los resultados.
    • Utiliza correctamente los métodos de agregación incorporados
      Calcula recuentos, totales, medias, medidas de dispersión y otros resúmenes por grupo, y conoce cómo tratan los valores faltantes y las columnas de texto.
    • Aplica varias agregaciones a la vez con agg
      Utiliza agg con listas, diccionarios y agregación con nombres de salida para crear tablas de resumen con nombres de columna claros.
    • Escribe funciones de agregación personalizadas
      Escribe tus propias funciones que reducen un grupo a un valor, asigna nombres a sus resultados y reconoce cuándo es mejor una función incorporada o un cociente de sumas.
  3. Añade resultados de grupo a cada fila, calcula valores acumulados y relativos dentro de los grupos, conserva grupos y filas o selecciona muestras, y utiliza apply para operaciones que los demás métodos no pueden expresar.
    • Añade estadísticos del grupo a cada fila con transform
      Utiliza transform para difundir los resultados de grupo a las filas originales y calcular proporciones, desviaciones y valores estandarizados, y rellenar datos faltantes según el grupo.
    • Calcula sumas acumuladas, rangos y variaciones dentro de los grupos
      Utiliza métodos acumulativos, de asignación de rangos y de desplazamiento que se reinician en cada grupo, y conserva las filas en el orden deseado.
    • Conserva, elimina o selecciona muestras de filas grupo a grupo
      Filtra grupos completos según una condición, toma las primeras, últimas o mejores filas de cada grupo y obtén muestras aleatorias dentro de los grupos.
    • Ejecuta operaciones generales por grupos con apply
      Utiliza apply para operaciones por grupos que necesitan varias columnas o devuelven tablas, predice la forma de su resultado y prefiere métodos más rápidos cuando sean adecuados.
  4. Convierte valores numéricos en categorías de intervalos con cut y qcut, calcula cuantiles y utiliza los intervalos como claves de agrupación para el análisis por intervalos y cuantiles.
    • Agrupa valores en intervalos con cut
      Utiliza cut con límites explícitos o un número de intervalos de igual amplitud, interpreta la notación de intervalos y controla los límites, las etiquetas y los valores fuera de los intervalos.
    • Crea intervalos con igual número de observaciones mediante cuantiles y qcut
      Calcula cuantiles, crea intervalos basados en cuantiles con qcut, compáralos con intervalos de igual amplitud y trata los empates.
    • Compara grupos definidos por intervalos y cuantiles
      Utiliza el resultado de cut y qcut como claves de agrupación para el análisis por intervalos y cuantiles, conserva los intervalos vacíos cuando sea necesario e interpreta los resultados con cuidado.
  5. Crea tablas de resumen de doble entrada con pivot_table y crosstab, añade totales, convierte recuentos en proporciones y elige la tabla que responda a la pregunta.
    • Crea tablas dinámicas con pivot_table
      Resume valores por claves de fila y columna con pivot_table, elige la función de agregación y añade valores de relleno y totales.
    • Cuenta y compara categorías con crosstab
      Crea tablas de frecuencias de dos variables categóricas con crosstab, añade totales, convierte recuentos en proporciones por fila, columna o respecto al total general y elige la proporción que responda a la pregunta.

Guía de estudio de Agrupación y agregación con pandas

5 capítulos

1

Divide los datos en grupos con groupby

El análisis agrupado comienza con una pregunta como «¿Cuántas unidades vendió cada región?». Eliges las claves que definen un grupo, seleccionas los valores que vas a analizar y decides qué forma debe tener la respuesta. Las mismas filas pueden servir para calcular totales regionales, comparar productos o combinar ambos enfoques. Comprender las claves, los índices y las categorías faltantes facilita la inspección de esos resultados y su uso en un informe.

1.1 Explica el patrón de dividir, aplicar y combinar y el objeto GroupBy

Un grupo contiene filas con el mismo valor de clave. Si la clave es region, todos los pedidos de North pertenecen a un grupo, aunque estén dispersos por la tabla. Dividir, aplicar y combinar significa identificar estos grupos, realizar la misma operación dentro de cada uno y reunir los resultados.

Comienza con los datos de pedidos

Los ejemplos utilizan pandas 3 con import pandas as pd y NumPy como np. Crea la tabla de pedidos de bebidas:

sales = pd.DataFrame({
    "region": ["North", "South", "North", "East", "South", "East", "North", "South"],
    "product": ["tea", "tea", "coffee", "coffee", "coffee", "tea", "tea", "coffee"],
    "units": [10, 4, 7, 5, 9, 3, 6, 8],
    "revenue": [30, 12, 28, 20, 36, 9, 18, 32]
})

Aquí los ingresos no tienen unidad monetaria. El té genera ingresos de 3 por unidad y el café de 4 por unidad. Las etiquetas de fila predeterminadas van de 0 a 7.

De un objeto GroupBy a una respuesta

sales.groupby("region") devuelve un objeto GroupBy, que contiene la información de agrupación. No es una tabla de resumen. Elige una columna y llama a un método para calcular un resultado:

g = sales.groupby("region")
totals = g["units"].sum()

East contiene las filas 3 y 5, por lo que su total es 5 + 3 = 8. North contiene las filas 0, 2 y 6, lo que da 10 + 7 + 6 = 23. South contiene las filas 1, 4 y 7, lo que da 4 + 9 + 8 = 21. pandas combina estos resultados en una Series llamada units, con los nombres de las regiones como índice. Los totales suman 52, el total de la columna original.

El orden de salida predeterminado es East, North, South porque las claves de grupo se ordenan. sales.groupby("region", sort=False) utiliza el orden de primera aparición: North, South, East. Ninguna de las dos opciones ordena las observaciones dentro de un grupo ni modifica sales.

Inspecciona y selecciona

g.ngroups es 3. g.size() indica 2, 3 y 3 filas para East, North y South. g.groups relaciona las claves con las etiquetas de fila y g.get_group("North") devuelve las tres filas de North. Puedes inspeccionar un grupo a la vez:

for name, group in g:
    print(name, group["units"].tolist())

El recorrido ayuda a inspeccionar o exportar grupos. Para calcular un estadístico, un método agrupado incorporado evita que tengas que escribir un bucle de Python y recopilar los resultados.

Seleccionar g["units"] produce un SeriesGroupBy; su suma es una Series. Seleccionar g[["units"]] produce un DataFrameGroupBy; su suma es un DataFrame de una columna. Selecciona g[["units", "revenue"]] cuando necesites ambas columnas numéricas.

Elige la forma de salida

Una agregación como sum da un valor de resumen por grupo y columna. Una transformación da un valor por cada fila de entrada, como la proporción que representa cada pedido en el total de su región. Un filtrado conserva las filas o grupos seleccionados. El método general apply gestiona resultados de grupo menos regulares.

Filtrar con sales[sales["region"] == "North"] recupera las filas de una región. Agrupar te permite procesar todas las regiones con la misma operación.

Puntos clave

  • Las claves de grupo determinan qué filas pertenecen al mismo grupo.
  • Un objeto GroupBy necesita una operación antes de producir un resultado.
  • Elige entre agregación, transformación o filtrado según la salida que necesites.
  • La agrupación conserva la tabla original y el orden de las filas dentro de cada grupo.

1.2 Agrupa por columnas, arreglos, correspondencias, funciones y niveles del índice

Las claves pueden proceder de columnas, cálculos o del índice de filas. La pregunta importante es qué valor recibe cada fila como clave. Las filas con la misma combinación de claves se procesan juntas.

Utiliza varias columnas

Pasa una lista de nombres de columnas para agrupar por combinaciones:

pair_totals = sales.groupby(["region", "product"])["units"].sum()

El resultado tiene un MultiIndex de dos niveles. Sus entradas son East–coffee 5, East–tea 3, North–coffee 7, North–tea 16, South–coffee 17 y South–tea 4. North–tea combina los dos pedidos de té, con 10 y 6 unidades. Agrupar solo por región también incluiría el pedido de café de North.

pair_totals.unstack() mueve el nivel interno product a las columnas. Las filas son regiones y las columnas son coffee y tea. Una combinación ausente se convierte en NaN; unstack(fill_value=0) puede representarla como cero cuando esa ausencia significa que no hay unidades.

Utiliza una lista para varios nombres de columnas. groupby(("region", "product")) trata la tupla como una sola etiqueta de columna y busca una columna cuyo nombre sea esa tupla.

Deriva una clave a partir de valores

Una Series booleana puede dividir los pedidos por tamaño sin añadir una columna:

sales.groupby(sales["units"] >= 7)["revenue"].sum()

El grupo True contiene las unidades 10, 7, 9 y 8; sus ingresos son 126. El grupo False contiene los otros cuatro pedidos y tiene ingresos de 59. La condición crea etiquetas de grupo; no elimina los pedidos más pequeños.

Una correspondencia puede combinar regiones en zonas:

zones = {"North": "Zone 1", "East": "Zone 1", "South": "Zone 2"}
zone_key = sales["region"].map(zones)
sales.groupby(zone_key)["units"].sum()

Zone 1 recibe las 23 unidades de North y las 8 de East, que suman 31. Zone 2 recibe las 21 de South. Aplica primero la correspondencia a la columna: un diccionario pasado directamente a groupby establece correspondencias con las etiquetas del índice, no con los valores de región.

Agrupa mediante el índice

Una función pasada como clave también recibe etiquetas del índice. Para las existencias indexadas por códigos de producto, la primera letra puede identificar la familia de productos:

stock = pd.Series([12, 8, 5, 9, 4],
                  index=["T01", "T02", "C01", "C02", "C03"])
stock.groupby(lambda code: code[0]).sum()

El total de C es 18 y el de T es 20. Para un MultiIndex existente, pair_totals.groupby(level="product").sum() vuelve a agrupar por el nivel del índice indicado por nombre, produciendo coffee 29 y tea 23.

Comprueba la alineación antes de agrupar

Una clave de arreglo de NumPy proporciona etiquetas por posición y debe tener un elemento por fila. Una Series de claves se alinea por etiqueta de índice. Si sus etiquetas solo cubren las filas 0 y 1, las demás reciben claves faltantes y se excluyen con el comportamiento de agrupación predeterminado. Una Series reordenada puede seguir agrupando correctamente cuando sus etiquetas coinciden; sustituirla por sus valores cambia la operación a un emparejamiento por posición.

Puntos clave

  • Utiliza una lista de nombres de columnas para agrupar por combinaciones.
  • Una Series de claves se alinea por etiqueta de índice; un arreglo proporciona valores por posición.
  • Aplica la correspondencia a los valores de una columna antes de agrupar cuando un diccionario describa esos valores.
  • Las funciones pasadas como claves reciben etiquetas del índice.
  • Utiliza level para los niveles del índice y unstack para mover un nivel del índice a las columnas.
  • Una clave booleana separa las filas en grupos basados en una condición sin eliminar ninguno de los grupos.

1.3 Controla las claves de grupo, el orden y las claves faltantes en los resultados

Un cálculo agrupado tiene dos partes que inspeccionar: los valores y las etiquetas que los acompañan. pandas te permite elegir dónde aparecen las claves, cómo se ordenan los grupos y si las claves faltantes o no utilizadas aparecen en el informe.

Conserva las claves en el índice o en columnas

De forma predeterminada, las claves se convierten en el índice del resultado:

sales.groupby("region")["revenue"].sum()

Esta Series tiene East 29, North 76 y South 80. Para un informe plano, utiliza:

report = sales.groupby("region", as_index=False)["revenue"].sum()

report tiene las columnas normales region y revenue y un nuevo índice de enteros. Llamar a .reset_index() sobre la Series original produce la misma estructura. Con varias claves, convierte cada nivel del MultiIndex en una columna. unstack() tiene otro propósito: mueve un nivel del índice a las columnas de una cuadrícula.

Una Series resultante conserva el nombre de la columna seleccionada. Utiliza .rename("total_revenue") para dar un nombre más claro a la Series o .to_frame("total_revenue") para obtener un DataFrame de una columna. La agregación con nombres de salida puede proporcionar nombres descriptivos para las columnas durante el cálculo.

Ordena las claves o los valores

sort=True ordena las claves, por lo que el orden alfabético de las regiones sigue siendo East, North, South aunque South tenga los mayores ingresos. Para ordenar los totales, ordena el resultado:

sales.groupby("region")["revenue"].sum().sort_values(ascending=False)

La salida es South 80, North 76, East 29. Utiliza sort=False para conservar el orden de primera aparición de las claves y evitar una ordenación innecesaria en un conjunto de datos grande. Esto no ordena las filas dentro de los grupos.

Ten en cuenta las claves faltantes

La opción predeterminada dropna=True excluye las filas con una clave de grupo faltante. Añade un pedido con 5 unidades pero sin región: el total de la columna completa de unidades es ahora 57, mientras que los totales agrupados siguen sumando 52. La fila omitida no tiene una región indicada.

sales.groupby("region", dropna=False)["units"].sum()

En la tabla ampliada, esto añade un grupo de claves faltantes que suma 5. Las claves faltantes determinan si una fila entra en un grupo; los valores faltantes determinan qué cuenta o calcula una agregación dentro de un grupo. Son decisiones distintas.

Muestra las categorías no utilizadas cuando sea necesario

Una columna categórica region puede incluir East, North, South y West aunque no haya pedidos de West. Desde pandas 3.0, observed=True es la opción predeterminada y muestra solo las categorías presentes en los datos. Con observed=False, también aparece West: su suma y su recuento son 0, mientras que su media es NaN.

Elige esta opción explícitamente cuando un informe deba mostrar las mismas categorías cada vez. Una categoría no utilizada y una clave faltante son diferentes: observed gestiona los valores categóricos declarados; dropna gestiona los valores de clave ausentes.

as_index y sort configuran los resultados de las agregaciones. Las transformaciones y los filtrados como head, nth y filter conservan los índices de las filas de entrada. Para un informe de sumas, comparar la suma de los totales de grupo con el total de la columna original puede revelar claves excluidas o un filtro anterior.

Puntos clave

  • as_index=False coloca las claves de agregación en columnas normales.
  • sort ordena las claves; sort_values ordena los valores calculados.
  • dropna=False conserva un grupo para las claves faltantes.
  • observed=False incluye los valores categóricos no utilizados.
2

Resume cada grupo mediante agregaciones

Una tabla de resumen convierte muchas observaciones en unas pocas medidas útiles. Los recuentos, totales, medias y medidas de dispersión responden a preguntas diferentes, aunque utilicen los mismos grupos. Elegirás las funciones incorporadas adecuadas, reunirás varios resultados en una llamada y escribirás una función personalizada cuando sea necesario. Los valores faltantes y los tamaños desiguales de los grupos importan: una tabla ordenada puede seguir respondiendo a la pregunta equivocada.

2.1 Utiliza correctamente los métodos de agregación incorporados

Una agregación reduce cada grupo a un valor de resumen para cada columna seleccionada. Elige la medida según la pregunta: un recuento de filas, un total, una media o una medida de variación describe una característica diferente de los datos.

Selecciona el estadístico

Entre los métodos habituales se encuentran sum, prod, mean, median, min, max, count, size, nunique, std, var, first, last y quantile. Tanto una llamada directa como .mean() como .agg("mean") solicitan una media de grupo de pandas. nunique() cuenta los valores distintos presentes de forma predeterminada.

sales.groupby("product")["revenue"].agg(["mean", "median"])

Los ingresos por café son 28, 20, 36 y 32. Su media es 29; al ordenarlos se obtienen los valores centrales 28 y 32, por lo que su mediana es 30. Los ingresos por té son 30, 12, 9 y 18. Su media es 17,25 y su mediana 15. El pedido grande de té de 30 eleva la media por encima de la mediana.

Cuenta filas o valores registrados

size() cuenta filas. count() cuenta los valores presentes en cada columna seleccionada. Si faltan las unidades de la fila 2 de North y de la fila 5 de East, los tamaños siguen siendo East 2, North 3, South 3, pero los recuentos de unidades son 1, 2 y 3. Por tanto, distintas columnas pueden tener distintos recuentos dentro del mismo grupo.

La mayoría de las reducciones numéricas omiten los valores faltantes. Las unidades restantes de North, 10 y 6, tienen una media de 8, calculada con dos valores registrados. Dividir su suma por las tres filas daría una media incorrecta. Un grupo con todos sus valores faltantes tiene una suma de 0 de forma predeterminada, pero una media NaN. Desde pandas 3.0, las reducciones como sum y mean aceptan skipna=False para devolver un resultado faltante cuando un grupo contiene un valor faltante.

Interpreta la dispersión y los resúmenes combinados

std() y var() utilizan estadísticos muestrales, con ddof=1: el divisor es uno menos que el número de observaciones registradas. Los valores 1 y 3 tienen una desviación estándar muestral de aproximadamente 1,414. Un grupo con el único valor 5 tiene una desviación estándar muestral NaN.

describe() reúne el recuento, la media, la desviación estándar, el mínimo, los cuartiles y el máximo. Para los ingresos de South 12, 36 y 32, la media es aproximadamente 26,67 y la mediana es 32. La columna del 50 % es la mediana.

Controla las columnas y el orden de las filas

Seleccionar columnas numéricas evita intentar calcular la media de texto:

sales.groupby("region")[["units", "revenue"]].mean()

Una llamada a .mean() sobre toda la tabla falla en la columna de texto product; numeric_only=True es otra solución. Una llamada a .sum() sobre toda la tabla puede concatenar texto y producir "coffeetea" para East, lo que no es un resumen útil de productos.

first() y last() eligen el primer y el último valor presente por columna en el orden actual de las filas. Pueden tomar valores de filas distintas. Utiliza nth(0) para recuperar la primera fila real, incluidos sus valores faltantes; ordena primero cuando «primero» signifique el más temprano.

Los tamaños desiguales de los grupos también afectan a la interpretación. Las medias regionales de ingresos dan un promedio de aproximadamente 22,17, pero la media general es 185 dividido entre 8, o 23,125. Dar el mismo peso a cada media regional otorga al grupo East de dos filas tanta influencia como a cada grupo de tres filas.

Puntos clave

  • size cuenta filas; count cuenta valores registrados.
  • La mayoría de las reducciones omiten los valores faltantes; la suma de un grupo con todos sus valores faltantes es cero de forma predeterminada.
  • std y var utilizan el divisor muestral de forma predeterminada.
  • Selecciona las columnas numéricas pertinentes antes de agregar.
  • first puede omitir valores faltantes; nth(0) selecciona una fila real.
  • Los grupos de distinto tamaño necesitan pesos adecuados al combinar sus medias.

2.2 Aplica varias agregaciones a la vez con agg

Un informe útil suele necesitar varias medidas de los mismos grupos. agg, abreviatura de aggregate, te permite solicitar esas medidas juntas y controlar cómo se nombran sus columnas de salida.

Aplica varias funciones a una columna
sales.groupby("region")["revenue"].agg(["sum", "mean", "max"])

East da 29; 14,5 y 20; North da 76; aproximadamente 25,33 y 30; South da 80; aproximadamente 26,67 y 36. Cada fila representa una región, mientras que los nombres de las funciones se convierten en nombres de columnas.

Una lista aplicada a varias columnas de valores produce columnas jerárquicas:

result = sales.groupby("region")[["units", "revenue"]].agg(["sum", "mean"])

Las cuatro etiquetas de columna son los pares ("units", "sum"), ("units", "mean"), ("revenue", "sum") y ("revenue", "mean"). El primer nivel identifica la columna de entrada; el segundo identifica el cálculo. Estos son niveles de columna, independientes de los niveles de agrupación del índice de filas.

Asigna funciones a columnas específicas

Un diccionario selecciona las columnas de entrada y sus funciones:

sales.groupby("region").agg({
    "units": "sum",
    "revenue": ["mean", "max"]
})

Esto solicita el total de unidades, pero la media y el máximo de ingresos. Las columnas ausentes del diccionario no aparecen. Distintas funciones pueden tener sentido para distintas medidas; sumar una cantidad y calcular la media de una tasa no son opciones intercambiables.

Asigna nombres directamente a las salidas

La agregación con nombres de salida da a cada resultado un nombre explícito:

report = sales.groupby("region").agg(
    total_units=("units", "sum"),
    avg_revenue=("revenue", "mean")
)

Cada argumento con nombre asigna un nombre a una columna de salida. Su tupla contiene la columna de origen y la función. total_units es 8, 23 y 21; avg_revenue es 14,5; aproximadamente 25,33 y aproximadamente 26,67. pd.NamedAgg(column="units", aggfunc="sum") es una alternativa para especificar el origen y la función.

Después de seleccionar una sola Series, utiliza argumentos con nombre para las funciones, sin tuplas de columna de origen:

sales.groupby("region")["units"].agg(total="sum", most="max")

Los totales son 8, 23 y 21, y los máximos 5, 10 y 9. Un diccionario como {"total": "sum"} sobre esta Series seleccionada genera un SpecificationError; no es la forma de diccionario utilizada en un DataFrame.

Una lista de pares con nombre también funciona en una columna seleccionada: .agg([("average", "mean"), ("spread", "std")]). Si ya tienes columnas MultiIndex creadas a partir de etiquetas de texto, result.columns = ["_".join(col) for col in result.columns] las aplana y produce nombres como units_sum.

Elige la función de forma deliberada

Los nombres de cadena utilizan los cálculos de grupo incorporados de pandas. Desde pandas 3.0, una función de NumPy o Python pasada a agg se llama tal como se proporciona. Para los ingresos de East 20 y 9, "std" utiliza el divisor muestral y da aproximadamente 7,78, mientras que np.std utiliza el divisor poblacional y da 5,5.

Puntos clave

  • Una lista aplica varias funciones a las columnas seleccionadas.
  • Un diccionario asigna funciones a determinadas columnas de entrada.
  • La agregación con nombres de salida utiliza nombres de salida con pares (column, function).
  • Los nombres de funciones como cadenas y los objetos invocables de NumPy pueden usar distintos valores estadísticos predeterminados.

2.3 Escribe funciones de agregación personalizadas

Una agregación personalizada expresa un resumen que no proporciona un nombre de función incorporada. Su función recibe los valores de un grupo como una Series y debe reducirlos a un resultado útil.

Escribe y pasa la función
def value_range(s):
    return s.max() - s.min()

sales.groupby("region")["revenue"].agg(value_range)

El rango de East es 20 menos 9, o 11. El de North es 30 menos 18, o 12. El de South es 36 menos 12, o 24. Pasa la propia función value_range; value_range() la llamaría inmediatamente sin la Series de grupo que necesita.

Una expresión lambda es adecuada para un cálculo breve:

sales.groupby("region")["revenue"].agg(
    share_20=lambda s: (s >= 20).mean()
)

Los valores booleanos actúan como 1 para True y 0 para False, por lo que su media es la proporción que cumple la condición. East tiene un pedido que cumple la condición de dos, o 0,5. North y South tienen cada una dos de tres, o aproximadamente 0,667. Dar un nombre al resultado hace que su significado sea más claro que una etiqueta automática de lambda. Las listas con varias funciones etiquetan las expresiones lambda como <lambda_0>, <lambda_1> y así sucesivamente; una sola expresión lambda en una lista recibe la etiqueta <lambda>.

Prepara columnas para utilizar reducciones rápidas

Una función de Python se ejecuta una vez por cada grupo. Cuando hay muchos grupos, las reducciones incorporadas suelen ser más rápidas. El cálculo de la proporción puede reescribirse creando primero su columna booleana:

sales.assign(big=sales["revenue"] >= 20).groupby("region")["big"].mean()

La comparación se ejecuta sobre toda la columna y pandas calcula las medias de grupo.

Combina dos columnas mediante sus totales

Una función de agg procesa una columna a la vez. Para obtener el ingreso medio por unidad, resume primero ambas columnas:

totals = sales.groupby("region")[["units", "revenue"]].sum()
avg_price = totals["revenue"] / totals["units"]

Los resultados son East 29/8 = 3,625, North 76/23 ≈ 3,304 y South 80/21 ≈ 3,810. Cada unidad recibe el mismo peso. Calcular la media de los precios por pedido da, en cambio, East 3,5, North aproximadamente 3,333 y South aproximadamente 3,667, porque cada pedido recibe el mismo peso independientemente de su tamaño. Decide si la pregunta se refiere a una unidad típica o a un pedido típico antes de elegir la fórmula.

Ten claros el valor devuelto y los datos faltantes

Una función que devuelve los dos valores más pequeños no crea dos filas de resumen normales mediante agg; en pandas 3.1, lambda s: s.nsmallest(2) almacena un objeto de tipo lista en cada celda. Utiliza apply cuando un grupo deba devolver varios valores o filas.

La Series de entrada sigue conteniendo los valores faltantes. s.mean() los omite, mientras que len(s) cuenta sus filas. Si faltan las unidades en las filas 2 y 5, .agg(len) da tamaños de grupo 2, 3 y 3, no recuentos de valores presentes 1, 2 y 3.

Los argumentos adicionales pueden ir después de la función: .agg("quantile", 0.9) da el percentil 90 de cada grupo. Los ingresos de East 9 y 20 dan 18,9 mediante interpolación lineal. La llamada directa .quantile(0.9) es más fácil de leer para esta única operación.

Puntos clave

  • Pasa una función a agg sin llamarla primero.
  • Una agregación personalizada recibe la Series de un grupo y debe devolver un valor de resumen.
  • Las medias de valores booleanos dan proporciones.
  • Un cociente de totales pondera las unidades de forma distinta que una media de cocientes por fila.
  • Prefiere las reducciones incorporadas cuando expresen el cálculo.
  • Las funciones personalizadas deben tratar los valores faltantes de forma deliberada.
3

Transforma, filtra y aplica funciones grupo a grupo

Un grupo puede proporcionar contexto para cada fila original, además de un resumen independiente. Un pedido puede recibir el total de su región, su rango o la variación respecto al pedido anterior de esa región. Otras tareas conservan grupos seleccionados o devuelven una tabla de cada grupo. Elegir un método según la forma de su salida hace que este trabajo sea más claro y evita errores de alineación de índices al añadir un resultado a los datos originales.

3.1 Añade estadísticos del grupo a cada fila con transform

Un resumen tiene una fila por grupo, pero a veces cada fila original necesita el estadístico de su grupo. transform devuelve un resultado con la longitud y el índice originales, por lo que resulta adecuado para una columna nueva.

Difunde un total a las filas correspondientes
g = sales.groupby("region")["revenue"]
regional_total = g.transform("sum")
sales["share"] = sales["revenue"] / regional_total

La Series de totales contiene 76, 80, 76, 29, 80, 29, 76 y 80 en el orden original de las filas. El total de North, 76, se repite solo en las filas de North. La fila 0 recibe una proporción de 30/76 ≈ 0,395; la fila 3 de East recibe 20/29 ≈ 0,690. Dentro de cada región, estas proporciones de ingresos suman 1.

Asignar g.sum() directamente no lograría emparejar las filas. Su índice contiene nombres de regiones, mientras que sales tiene etiquetas de fila de 0 a 7. pandas alinea por etiqueta de índice, por lo que la columna asignada queda con valores faltantes. Utiliza transform o combina explícitamente un resumen mediante region.

Compara una fila con su grupo

Restar la media del grupo da una desviación respecto a la media del grupo:

x = sales["revenue"]
deviation = x - g.transform("mean")

La fila 0 de North está aproximadamente 4,67 por encima de la media de su grupo, que es aproximadamente 25,33. La fila 1 de South está aproximadamente 14,67 por debajo de la media de su grupo, que es aproximadamente 26,67. Cada comparación utiliza la región propia de la fila, no la media de toda la tabla.

Una puntuación z divide esa desviación por la desviación estándar del grupo:

z = (x - g.transform("mean")) / g.transform("std")

Para la fila 0 de North, la desviación estándar muestral es aproximadamente 6,43 y la puntuación z aproximadamente 0,73. La fila 3 de East tiene una puntuación z de aproximadamente 0,71, por lo que está por encima de la media de su región aunque sus ingresos de 20 estén por debajo de la media general de 23,125. Una desviación estándar de cero o un número insuficiente de valores registrados deja la puntuación estandarizada sin definir.

Rellena un valor faltante a partir de su grupo

Supón que faltan las unidades de las filas 2 y 5. Las unidades registradas de North son 10 y 6, con media 8; el único valor de unidades registrado de East es 5.

with_missing = sales.copy()
with_missing.loc[[2, 5], "units"] = np.nan
means = with_missing.groupby("region")["units"].transform("mean")
filled_units = with_missing["units"].fillna(means)

En esa tabla modificada, la fila 2 recibe 8 y la fila 5 recibe 5. Los valores existentes permanecen sin cambios. Cuando los grupos tienen valores típicos diferentes, sus propias medias pueden ofrecer sustituciones más realistas que una sola media general. Un grupo sin valores registrados sigue sin tener una media que proporcionar.

Comprende una transformación personalizada

Una función proporcionada a transform puede devolver un escalar, que pandas repite dentro del grupo, o una Series indexada según las filas del grupo. Por ejemplo, g.transform(lambda s: s - s.mean()) calcula las mismas desviaciones que la media incorporada seguida de una resta, pero invoca Python para cada grupo.

Una Series devuelta más corta se empareja por etiqueta. g.transform(lambda s: s.head(1)) proporciona solo el valor de la primera fila de cada grupo; las demás filas reciben NaN. Conserva el índice original en los cálculos por fila cuando vayas a asignar el resultado de nuevo a la tabla.

Puntos clave

  • transform devuelve resultados alineados con las filas de entrada.
  • Divide cada valor por el total transformado de su grupo para obtener proporciones dentro del grupo.
  • Utiliza las medias y desviaciones estándar de los grupos para comparar valores dentro de cada grupo.
  • El relleno basado en grupos utiliza el estadístico del grupo al que pertenece la fila con el valor faltante.

3.2 Calcula sumas acumuladas, rangos y variaciones dentro de los grupos

Los cálculos acumulados y las comparaciones con observaciones anteriores necesitan tanto un grupo como un orden de filas. La agrupación evita que un cálculo pase a otro grupo; la ordenación determina qué significan «anterior» o «hasta ese momento».

Acumula dentro de cada grupo

Supón que las filas de pedidos ya están en orden temporal:

sales["running_units"] = sales.groupby("region")["units"].cumsum()

Las unidades de North 10, 7 y 6 producen sumas acumuladas de 10, 17 y 23. Las de South 4, 9 y 8 producen 4, 13 y 21. Las de East 5 y 3 producen 5 y 8. Estos valores permanecen asociados a sus etiquetas de fila originales, por lo que la salida completa en orden de filas es 10, 4, 17, 5, 13, 8, 23 y 21.

Sin groupby, sales["units"].cumsum() daría una sola suma acumulada para todos los pedidos: 10, 14, 21, 26, 35, 38, 44 y 52. El cálculo agrupado se reinicia para cada región. Entre los métodos relacionados están cumprod, cummax y cummin para productos, máximos y mínimos acumulados.

cumcount() cuenta las posiciones dentro de los grupos desde cero. Aquí da 0, 0, 1, 0, 1, 1, 2 y 2. Suma 1 para obtener los números de primer, segundo y tercer pedido dentro de cada región.

Asigna rangos sin reorganizar las filas
sales.groupby("region")["revenue"].rank(ascending=False)

El mayor ingreso recibe el rango 1 en su propia región: la fila 0 de North, la fila 4 de South y la fila 3 de East. La salida conserva el índice de entrada; asignar rangos no mueve las filas mayores a la parte superior de la tabla.

De forma predeterminada, los valores empatados reciben la media de sus rangos. Si dos valores empatan en el primer puesto, ambos obtienen 1,5 y el siguiente obtiene 3. method="min" da 1 a los valores empatados y sigue dando 3 al siguiente. method="dense" da 1 a los valores empatados y 2 al siguiente. Elige una regla de desempate que se ajuste a cómo se interpretarán los rangos.

Compara valores consecutivos
g = sales.groupby("region")["units"]
previous = g.shift(1)
change = g.diff()
relative_change = g.pct_change()

Los valores anteriores de North son un valor faltante, 10 y 7. Sus diferencias son un valor faltante, −3 y −1. Sus variaciones relativas son un valor faltante, −0,3 y aproximadamente −0,143: la diferencia se divide por el valor anterior. pct_change() devuelve una fracción, por lo que −0,3 significa una disminución del 30 %, no del 0,3 %.

La primera observación de cada grupo no tiene una observación anterior y recibe NaN. Un shift() aplicado a la columna sin agrupar usaría la fila anterior de toda la tabla, que podría pertenecer a otra región.

Antes de estos cálculos ordenados, ordena las filas por la columna que define la secuencia, como una fecha o un número de evento. groupby(sort=True) ordena solo las claves de grupo; no puede colocar las observaciones en orden cronológico. La asignación de rangos compara valores y trata los empates independientemente de la cronología, mientras que los cálculos acumulados y con valores rezagados dependen de la secuencia elegida.

Puntos clave

  • Ordena las observaciones antes de realizar cálculos que dependen de su secuencia.
  • Los métodos acumulativos agrupados se reinician dentro de cada grupo.
  • cumcount comienza en cero; suma 1 para obtener números de secuencia habituales.
  • Elige explícitamente la dirección del rango y el método para los empates cuando sea necesario.
  • shift, diff y pct_change comparan observaciones dentro del mismo grupo.
  • pct_change devuelve una fracción que puede multiplicarse por 100 para obtener un porcentaje.

3.3 Conserva, elimina o selecciona muestras de filas grupo a grupo

Conservar un grupo y resumirlo son operaciones distintas. Un filtro de grupos utiliza una condición aplicada a todo el grupo para decidir qué filas originales permanecen; los métodos de selección de filas eligen observaciones concretas de cada grupo.

Conserva grupos completos
sales.groupby("region").filter(lambda g: len(g) >= 3)

North y South tienen tres pedidos cada una, mientras que East tiene dos. El resultado contiene las filas 0, 1, 2, 4, 6 y 7, en su orden y con sus etiquetas originales. No devuelve dos filas de resumen regional.

La condición debe producir un único valor booleano por cada grupo. lambda g: g["units"] > 5 produce una Series booleana y no es válida para filter. Reduce esa condición con all() o any():

sales.groupby("region").filter(lambda g: (g["units"] > 5).all())

Solo North cumple la condición, porque todos sus valores de unidades, 10, 7 y 6, superan 5. Usar any() también conserva South porque al menos uno de sus pedidos supera 5.

Un tamaño de grupo transformado proporciona una máscara más rápida y alineada con las filas para la primera tarea:

sizes = sales.groupby("region")["units"].transform("size")
sales[sizes >= 3]

Esta máscara puede combinarse con otras condiciones por fila mediante & y |. Filtrar sales.groupby("region")["revenue"].sum() conservaría, en cambio, entradas de resumen y no los pedidos originales.

Toma filas por posición

head(n) toma las primeras n filas por grupo, tail(n) las últimas n y nth(k) la fila en la posición k contando desde cero. sales.groupby("region").head(1) devuelve las filas 0, 1 y 3: el primer pedido observado de cada región. Los valores faltantes no hacen que head(1) busque una fila posterior sin valores faltantes.

Para seleccionar el pedido más grande de cada región, ordena primero por ingresos:

sales.sort_values("revenue", ascending=False).groupby("region").head(1)

Las filas seleccionadas son la fila 4 de South con ingresos de 36, la fila 0 de North con 30 y la fila 3 de East con 20. La ordenación controla qué observación es la primera; la operación de grupo toma entonces esa primera fila. Con etiquetas de fila únicas, sales.loc[sales.groupby("region")["revenue"].idxmax()] recupera los mismos máximos mediante sus etiquetas.

Selecciona muestras dentro de cada grupo
sales.groupby("region").sample(n=1, random_state=0)

Esto selecciona un pedido de cada región. Establecer random_state hace que las ejecuciones repetidas sobre los mismos datos sean reproducibles. Una muestra de todo el DataFrame podría omitir una región, aunque tenga tres filas en total.

Utiliza frac=0.5 para seleccionar aproximadamente la mitad de las filas de cada grupo. El tamaño de la muestra por grupo se redondea: con frac=0.2, las dos filas de East dan 0,4 filas, que se redondean a cero. Utiliza un n=1 explícito cuando cada grupo no vacío deba aportar una observación. El tamaño de muestra solicitado debe ser viable para los grupos con la configuración de muestreo elegida.

Puntos clave

  • filter devuelve las filas originales de los grupos que cumplen su condición booleana única.
  • head, tail y nth seleccionan filas en el orden actual.
  • Ordena antes de usar head para seleccionar los valores mayores.
  • El muestreo agrupado con n=1 representa a cada grupo no vacío; una fracción pequeña puede omitir grupos pequeños.

3.4 Ejecuta operaciones generales por grupos con apply

apply permite que una función examine un grupo completo y devuelva un escalar, una Series o un DataFrame. Esa flexibilidad es útil cuando las columnas deben interactuar o el resultado contiene varias filas. También hace que la forma del resultado sea menos predecible que con agg o transform.

Utiliza varias columnas juntas
def price_per_unit(g):
    return g["revenue"].sum() / g["units"].sum()

sales.groupby("region").apply(price_per_unit)

La función recibe las filas de una región. Devuelve un valor, por lo que pandas combina las salidas en una Series indexada por región: East 3,625, North aproximadamente 3,304 y South aproximadamente 3,810. Un cociente de sumas agrupadas incorporadas produce el mismo resultado con menos sobrecarga de Python. np.average(g["revenue"] / g["units"], weights=g["units"]) expresa la media ponderada equivalente.

Para un estadístico que involucra dos columnas, como la correlación entre horas de estudio y calificación dentro de cada grupo de clase, apply puede pasar las dos Series de cada grupo a .corr().

Predice cómo se combinan las salidas

Una función que devuelve una Series con las mismas etiquetas para cada grupo crea una fila de tabla por grupo:

sales.groupby("region").apply(
    lambda g: pd.Series({
        "orders": len(g),
        "avg_price": g["revenue"].sum() / g["units"].sum()
    })
)

Las columnas son orders y avg_price. Los recuentos aparecen como 2,0; 3,0 y 3,0 porque la Series devuelta también contiene un precio de coma flotante. Si las Series devueltas utilizan etiquetas distintas, pandas las apila en una Series más larga y añade las claves de grupo como nivel externo del índice.

Un DataFrame por grupo se apila en un DataFrame mayor:

def top(g, n=2, col="revenue"):
    return g.sort_values(col, ascending=False).head(n)

sales.groupby("region").apply(top)

Las filas son East 3 y 5, North 0 y 2, y South 4 y 7. Cada grupo se ordena por separado. Los argumentos adicionales van después de la función: .apply(top, n=1, col="units") cambia la selección al pedido con más unidades.

Controla las claves y la alineación

Para estas filas devueltas, la opción predeterminada group_keys=True añade la región como nivel externo del índice. sales.groupby("region", group_keys=False).apply(top) conserva solo las etiquetas de fila originales. Sigue reuniendo los resultados grupo a grupo; no garantiza el orden de las filas de la tabla de entrada.

Desde pandas 3.0, el DataFrame que se pasa a un apply agrupado excluye las columnas de agrupación. En este ejemplo tiene product, units y revenue, pero no region. Lee la clave del grupo actual desde g.name cuando la función la necesite.

Utiliza el método más específico cuando sea adecuado

apply ejecuta código Python para cada grupo e infiere cómo reunir la salida. Utiliza agg para valores de resumen por columna, transform para resultados alineados con cada fila de entrada y filter para decidir si se conserva o elimina cada grupo completo.

Por ejemplo, restar la media de cada región mediante apply sobre una Series seleccionada devuelve las diferencias bajo un MultiIndex de región y fila. transform devuelve las diferencias con el índice original y están listas para asignarse como columna.

Puntos clave

  • apply puede utilizar varias columnas y devolver resultados con formas flexibles.
  • Un resultado escalar da una Series; las etiquetas coincidentes de las Series dan una tabla.
  • Los resultados DataFrame se apilan, normalmente con las claves de grupo en el índice.
  • Desde pandas 3.0, apply agrupado excluye las columnas de agrupación de cada grupo de entrada.
  • Prefiere agg, transform o filter cuando su forma de resultado sea adecuada.
  • Utiliza group_keys para controlar las etiquetas externas de grupo, no para restablecer el orden original de las filas.
4

Agrupa datos numéricos en intervalos y analiza grupos por intervalos y cuantiles

Los valores numéricos pueden convertirse en etiquetas de grupo útiles cuando los divides en intervalos. Los límites fijos permiten comparar los mismos rangos entre informes; los cuantiles permiten comparar las partes inferior y superior de una muestra. Crearás ambos tipos de intervalos, inspeccionarás los límites y los empates, y resumirás otra variable dentro de ellos. Los recuentos junto a los resúmenes te ayudan a ver cuántos datos respaldan cada comparación.

4.1 Agrupa valores en intervalos con cut

La agrupación en intervalos, también llamada discretización, sustituye los valores numéricos por categorías de intervalos. Utilízala cuando un informe necesite rangos significativos, como tramos de calificaciones, en lugar de un grupo separado para cada número.

Establece límites explícitos
scores = pd.Series([42, 50, 55, 64, 68, 70, 73, 81, 85, 88, 97, 100])
bands = pd.cut(scores, [0, 50, 70, 85, 100])
bands.value_counts(sort=False)

Cinco límites definen cuatro intervalos: (0, 50], (50, 70], (70, 85] y (85, 100]. Contienen 2, 4, 3 y 3 calificaciones. Los límites explícitos pueden definir intervalos de amplitudes distintas porque describen límites significativos.

Un paréntesis excluye un extremo y un corchete lo incluye. Con la opción predeterminada right=True, 50 pertenece al primer intervalo, 70 al segundo, 85 al tercero y 100 al cuarto. Lee (50, 70] como «mayor que 50 y como máximo 70».

Gestiona los límites exteriores

Con estos límites explícitos, 0 queda excluido del primer intervalo y 101 queda fuera del último. Ambos reciben NaN. Utiliza include_lowest=True para incluir un valor igual al límite inferior. Los valores por debajo del límite inferior o por encima del superior siguen sin recibir intervalo.

Para intervalos cerrados por la izquierda, utiliza right=False. Los mismos límites definen entonces [0, 50), [50, 70), [70, 85) y [85, 100). Ahora 50 pasa al segundo intervalo y 100 queda excluido. Los recuentos del ejemplo pasan a ser 1, 4, 3 y 3, con una asignación de intervalo faltante. Un límite superior de 101 incluiría la calificación 100 en el último intervalo cerrado por la izquierda.

Cambiar el cierre cambia la pertenencia en un límite. Comprueba un mínimo, un límite interno y un máximo antes de utilizar los tramos en un informe.

Añade etiquetas legibles
bands = pd.cut(
    scores, [0, 50, 70, 85, 100],
    labels=["fail", "pass", "merit", "distinction"]
)

Proporciona una etiqueta para cada intervalo: cuatro etiquetas para cinco límites. La salida es una variable categórica ordenada, por lo que su orden es fail, pass, merit, distinction, no el orden alfabético. labels=False devuelve, en cambio, códigos de intervalo de 0 a 3 para los valores asignados.

value_counts() normalmente ordena por frecuencia. Utiliza sort=False u ordena el índice resultante para conservar la secuencia de los intervalos. De lo contrario, el tramo más frecuente puede aparecer primero y dificultar la lectura de la distribución.

Pide a pandas intervalos de igual amplitud

Pasar un entero solicita esa cantidad de intervalos de igual amplitud:

bands, edges = pd.cut(scores, 4, retbins=True)

El rango de 42 a 100 abarca 58, lo que da amplitudes de 14,5. Los límites internos son 56,5; 71,0 y 85,5. pandas amplía ligeramente el extremo inferior para estos intervalos cerrados por la derecha, dando un primer límite de 41,942 para incluir el mínimo. En este caso, cada intervalo contiene tres calificaciones; las amplitudes iguales no producen, en general, recuentos iguales.

retbins=True devuelve los límites reales además de las asignaciones. Los límites explícitos deben estar en orden creciente: [0, 70, 50, 100] no puede definir la secuencia de intervalos deseada.

Puntos clave

  • cut convierte valores numéricos en categorías de intervalos.
  • De forma predeterminada, los intervalos excluyen el límite izquierdo e incluyen el derecho.
  • Los límites explícitos dejan sin asignar los valores fuera del rango.
  • include_lowest=True incluye el límite explícito inferior.
  • Un número entero de intervalos solicita amplitudes iguales, no recuentos iguales.
  • Las etiquetas y los recuentos deben conservar el orden previsto de los intervalos.
  • right=False cambia qué extremo pertenece a cada intervalo; comprueba el máximo después de cambiar el cierre.

4.2 Crea intervalos con igual número de observaciones mediante cuantiles y qcut

Un cuantil describe una posición en los datos ordenados. La mediana es el cuantil 0,5; los cuartiles dividen la distribución en cuartos, los deciles en décimas partes y los percentiles en centésimas partes. qcut utiliza los cuantiles muestrales como límites de los intervalos.

Calcula un cuantil

Para las calificaciones 42, 50, 55, 64, 68, 70, 73, 81, 85, 88, 97 y 100:

scores.quantile([0.25, 0.5, 0.75])

Los resultados son 61,75; 71,5 y 85,75. pandas utiliza interpolación lineal de forma predeterminada. Para el cuantil 0,25, la posición contando desde cero es:

0,25(12−1)=2,75

La posición 2 contiene 55 y la posición 3 contiene 64. Avanza tres cuartas partes de la distancia entre ambos:

55+0,75(64−55)=61,75

Por tanto, un cuantil muestral puede estar entre valores observados. No tiene por qué ser igual a una calificación que alguien haya obtenido.

Crea grupos de cuantiles
quartile = pd.qcut(scores, 4, labels=["Q1", "Q2", "Q3", "Q4"])

Esta muestra da tres calificaciones por grupo de cuartil. Los límites internos son los tres cuartiles calculados. El primer intervalo incluye el mínimo; la visualización del intervalo ajusta su etiqueta inferior ligeramente por debajo de 42. Utiliza labels=False para obtener códigos de 0 a 3, o retbins=True para recuperar los límites numéricos.

Una lista de proporciones controla los rangos de cuantiles. pd.qcut(x, [0, 0.1, 0.5, 0.9, 1]) separa el 10 % inferior, dos partes intermedias divididas por la mediana y el 10 % superior.

Elige entre amplitudes y recuentos
Método¿Qué determina los límites?¿Qué se mantiene comparable?
cut(x, n)Intervalos iguales en todo el rango observadoAmplitud numérica
cut(x, edges)Límites explícitos proporcionadosLos rangos elegidos
qcut(x, n)Cuantiles de esta muestraRecuentos aproximados de observaciones

Los tiempos de entrega de 5, 6, 7, 7, 8, 9, 10, 12, 15, 20, 35 y 60 minutos muestran la diferencia. Tres intervalos de igual amplitud contienen 10, 1 y 1 observaciones. Tres intervalos definidos por cuantiles contienen 4 cada uno, con límites internos de aproximadamente 7,67 y 13 minutos. Las demoras largas amplían el rango dividido en intervalos de igual amplitud y dejan la mayoría de las observaciones en el primer intervalo.

Utiliza límites fijos cuando debas comparar los mismos rangos de tiempo entre conjuntos de datos. Los límites de cuantiles cambian cuando cambia la muestra.

Mantén visibles los empates

Para los valores 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 10 y 12, los límites de los cuartiles son 3,75; 6 y 8,25. Ambos valores de 6 pertenecen al mismo intervalo, por lo que los recuentos son 3, 4, 2 y 3. La agrupación en intervalos con igual número de observaciones es aproximada cuando hay valores empatados.

Con muchos empates, los límites de cuantiles pueden coincidir. Para 1, 1, 1, 1, 1, 1, 2 y 3, solicitar cuartiles da límites repetidos. duplicates="drop" elimina los límites duplicados y deja solo dos intervalos, con recuentos de 6 y 2. Asignar rangos primero con rank(method="first") puede forzar cuatro grupos de igual tamaño, pero separa los valores iguales según el orden de las filas. Esto cambia el significado de intervalos de valores a grupos basados en rangos con empates resueltos.

Puntos clave

  • Los cuantiles pueden estar entre observaciones porque pandas interpola.
  • qcut utiliza cuantiles muestrales para crear grupos con aproximadamente el mismo número de observaciones.
  • Utiliza límites fijos con cut para rangos que deban seguir siendo comparables entre conjuntos de datos.
  • Los empates pueden hacer que los recuentos de los intervalos definidos por cuantiles sean desiguales o producir límites duplicados.
  • Eliminar límites duplicados reduce el número de intervalos; asignar rangos primero separa los valores empatados.

4.3 Compara grupos definidos por intervalos y cuantiles

Una etiqueta de intervalo puede servir como clave de grupo. Esto te permite preguntar cómo cambia una variable entre los rangos de otra, como la calificación media de examen entre tramos de horas de estudio. El resumen describe las observaciones de cada tramo.

Crea un resumen por intervalos

Crea los datos de estudiantes:

students = pd.DataFrame({
    "group": ["day", "evening", "day", "evening", "day", "evening", "day", "evening", "day", "day", "evening", "day"],
    "hours": [2, 3, 3, 5, 4, 6, 6, 8, 7, 9, 10, 12],
    "score": [42, 50, 55, 64, 68, 70, 73, 81, 85, 88, 97, 100]
})
hour_band = pd.cut(students["hours"], [0, 3, 6, 9, 12])
students.groupby(hour_band)["score"].agg(["count", "mean"])

Los cuatro tramos contienen 3, 4, 3 y 2 estudiantes. Sus calificaciones medias son 49; 68,75; aproximadamente 84,67 y 98,5. En el primer tramo, las calificaciones son 42, 50 y 55; su media es 147/3 = 49. El recuento muestra cuántas calificaciones registradas respaldan cada media.

La Series de tramos tiene una entrada por estudiante y el mismo índice, por lo que sus asignaciones coinciden con las filas durante la agrupación. La columna numérica hours sigue disponible para otros cálculos.

Conserva los intervalos vacíos cuando un informe los necesite

Desde pandas 3.0, observed=True es la opción predeterminada de agrupación para claves categóricas. Añade un límite de 15 y se omitirá el tramo no utilizado (12, 15]. observed=False lo conserva con recuento 0 y media NaN. Cero estudiantes es un recuento; una media de cero sugeriría erróneamente que las calificaciones observadas tienen una media de cero.

Los intervalos son categorías ordenadas, por lo que la salida agrupada normal sigue el orden de intervalos de menor a mayor. Las etiquetas con nombre conservan el orden asignado a sus intervalos.

Analiza grupos de cuantiles y combinaciones
quartile = pd.qcut(students["hours"], 4,
                   labels=["Q1", "Q2", "Q3", "Q4"])
students.groupby(quartile)["score"].agg(["count", "min", "max", "mean"])

Los recuentos son 3, 4, 2 y 3, con calificaciones medias de 49; 68,75; 83 y 95. Los valores empatados de 6 explican los recuentos desiguales. Para comparar estudiantes de día y de noche dentro de cada cuartil, agrupa por [quartile, "group"] y llama a .mean().unstack(). Las medias de Q1 son day 48,5 y evening 50; las medias de Q4 son day 94 y evening 97.

La dirección del análisis importa. Agrupar las horas de estudio por tramos de calificación responde a otra pregunta: las medias de horas de los tramos fail, pass, merit y distinction son 2,5; 4,5; 7 y aproximadamente 10,33.

Decide qué población define un cuantil

Una división de las calificaciones por la mediana general utiliza 71,5. Una división dentro de cada clase utiliza su propia mediana: day 73 y evening 70.

within_class = students.groupby("group")["score"].transform(
    lambda s: pd.qcut(s, 2, labels=["lower", "upper"])
)

El estudiante de day con una calificación de 73 está por encima de la mediana general, pero pertenece a la mitad inferior dentro del grupo day. Ambas etiquetas son correctas porque responden a preguntas de comparación distintas.

Una media creciente entre los tramos de horas es una asociación. Los estudiantes de distintos tramos pueden diferir en otros aspectos, por lo que la tabla por sí sola no puede establecer que el tiempo adicional de estudio haya causado la diferencia de calificación. Los recuentos pequeños también hacen que una media sea más sensible a una sola observación.

Puntos clave

  • Utiliza una Series de intervalos como clave de grupo para resumir otra variable.
  • Indica los recuentos junto a las medias para que se vea la cantidad de datos que las respalda.
  • observed=False conserva los intervalos vacíos con recuentos de cero y medias faltantes.
  • Los cuantiles generales y los calculados dentro de cada grupo utilizan poblaciones de referencia distintas.
  • Los patrones entre intervalos describen asociaciones y pueden ser sensibles a muestras pequeñas.
5

Resume datos en tablas dinámicas y tablas de contingencia

Una tabla de doble entrada facilita la comparación de combinaciones de categorías. Una tabla dinámica resume un valor numérico en cada intersección de fila y columna, mientras que una tabla de contingencia suele contar observaciones. Los totales y las proporciones añaden contexto, pero su significado depende de la agregación y del denominador. Crearás ambas tablas y leerás cada celda como respuesta a una pregunta precisa.

5.1 Crea tablas dinámicas con pivot_table

Una tabla dinámica resume valores para combinaciones de claves de fila y columna. Cada celda reúne las observaciones de una intersección y aplica una función, como una suma o una media.

Asigna las funciones explícitamente
sales.pivot_table(
    index="region", columns="product",
    values="revenue", aggfunc="sum"
)

index proporciona las claves de fila, columns las claves de columna, values la variable medida y aggfunc el cálculo. La tabla es:

Regióncoffeetea
East209
North2848
South6812

North–tea combina los ingresos 30 y 18, por lo que su suma es 48. South–coffee combina 36 y 32, lo que da 68. Los mismos datos pueden resumirse con sales.groupby(["region", "product"])["revenue"].sum().unstack().

La opción predeterminada de aggfunc es "mean". Omitirla daría North–tea 24 y South–coffee 34. Indica aggfunc="sum" cuando la pregunta pida totales; la estructura de una tabla no indica qué estadístico contiene.

Rellena con cuidado las combinaciones ausentes

Las combinaciones sin observaciones aparecen como NaN. Elimina el pedido de té de East y esa celda pasa a ser un valor faltante. fill_value=0 puede representar la ausencia de pedidos en un informe de sumas o recuentos. Para una media, sustituir una celda vacía por 0 sugiere una media observada que nunca se midió. Conserva su estado de valor faltante cuando no exista una media.

Las claves categóricas siguen la opción observed; desde pandas 3.0, la opción predeterminada muestra las categorías observadas. Establécela explícitamente cuando un informe deba conservar las categorías no utilizadas.

Añade resúmenes marginales con la misma función
sales.pivot_table(
    index="region", columns="product", values="revenue",
    aggfunc="sum", margins=True, margins_name="Total"
)

Los totales de fila son East 29, North 76 y South 80. Los totales de columna son coffee 116 y tea 69; el total general es 185. margins_name sustituye la etiqueta predeterminada All.

Los resúmenes marginales se vuelven a calcular a partir de las filas originales utilizando la función de agregación. Para una tabla dinámica de medias, la esquina es 23,125, la media de los ocho pedidos. Calcular la media de las medias de las seis celdas mostradas daría aproximadamente 21,17 porque las celdas contienen distintos números de observaciones. Un resumen marginal no es una instrucción general de sumar o promediar los números que aparezcan en pantalla.

Amplía la tabla o cuenta sus filas

aggfunc=["sum", "mean"] crea un bloque de columnas para cada estadístico. Con units, North–tea tiene suma 16 y media 8. Un diccionario de funciones como {"units": "sum", "revenue": "max"} asigna funciones a columnas de valores separadas. Varias claves también pueden crear filas o columnas jerárquicas, y los valores agrupados en intervalos funcionan como claves categóricas.

aggfunc="size" cuenta las filas por celda, mientras que "count" cuenta los valores presentes en la columna de valores elegida. North tiene un pedido de café y dos de té.

pivot no realiza ninguna agregación y requiere combinaciones únicas de fila y columna. La tabla de ventas tiene combinaciones repetidas de North–tea y South–coffee, por lo que pivot genera un error de entrada duplicada. Utiliza pivot_table cuando deban combinarse varias observaciones en una celda.

Puntos clave

  • index, columns, values y aggfunc definen el significado de cada celda de la tabla dinámica.
  • La agregación predeterminada es una media; solicita las sumas explícitamente.
  • Rellena con cero los recuentos o totales ausentes solo cuando cero exprese correctamente la ausencia.
  • Los resúmenes marginales aplican la misma función a las observaciones originales.
  • Varias funciones o valores pueden producir columnas jerárquicas.
  • Utiliza pivot_table para combinaciones de claves repetidas y pivot para combinaciones únicas.

5.2 Cuenta y compara categorías con crosstab

Una tabla de contingencia, o tabulación cruzada, cuenta observaciones para combinaciones de variables categóricas. Las proporciones permiten después comparar grupos que contienen distintos números de observaciones.

Cuenta combinaciones

Los datos de la encuesta tienen seis usuarios del plan básico: cuatro usan teléfonos y dos usan portátiles. Entre sus cuatro usuarios premium hay un usuario de teléfono y tres de portátil.

survey = pd.DataFrame({
    "plan": ["basic"] * 6 + ["premium"] * 4,
    "device": ["phone", "phone", "phone", "laptop", "phone", "laptop",
               "laptop", "laptop", "phone", "laptop"],
    "minutes": [20, 35, 15, 40, 25, 50, 60, 45, 30, 55]
})
counts = pd.crosstab(survey["plan"], survey["device"], margins=True)

Pasa las Series reales, no las cadenas "plan" y "device". La primera variable proporciona las filas y la segunda las columnas. La fila basic contiene laptop 2 y phone 4; la fila premium contiene laptop 3 y phone 1. Los totales de fila son 6 y 4, los totales de columna son 5 y 5, y el total general es 10.

Para los recuentos sin normalizar, una combinación ausente se muestra como cero. Se pueden obtener recuentos equivalentes con survey.groupby(["plan", "device"]).size().unstack(fill_value=0) o con una tabla dinámica que utilice aggfunc="size". survey.value_counts(["plan", "device"]) da una lista larga de frecuencias ordenada por recuento.

Elige el denominador según la pregunta
OpciónDenominadorSignificado de basic–phone
normalize="all"Todas las observaciones4/10 = 0,4
normalize="index"Total de la fila basic4/6 ≈ 0,667
normalize="columns"Total de la columna phone4/5 = 0,8

«¿Qué proporción de usuarios premium utiliza una portátil?» parte de los usuarios premium, por lo que el denominador es 4. Utiliza la normalización por filas; la respuesta es 3/4 = 0,75. «¿Qué proporción de usuarios de teléfono tiene el plan básico?» parte de los usuarios de teléfono, por lo que el denominador es 5. Utiliza la normalización por columnas; la respuesta es 4/5 = 0,8.

Un recuento de tres usuarios premium con portátil supera el recuento de dos del plan básico, pero la comparación dentro de cada plan es del 75 % frente a aproximadamente el 33,3 %. Identifica la población que se compara antes de convertir un recuento en una proporción. Multiplica los valores normalizados por 100 para obtener porcentajes.

Con margins=True, los resúmenes marginales normalizados también tienen significado. La normalización por filas añade una fila All que muestra las proporciones generales de dispositivos, 0,5 y 0,5. La normalización por columnas añade una columna All que muestra las proporciones generales de planes, 0,6 y 0,4.

Resume una tercera variable

Proporciona values y aggfunc para sustituir las frecuencias por un estadístico numérico:

pd.crosstab(survey["plan"], survey["device"],
            values=survey["minutes"], aggfunc="mean")

Las sesiones con portátil del plan básico de 40 y 50 minutos tienen una media de 45. Las sesiones con teléfono del plan básico de 20, 35, 15 y 25 minutos tienen una media de 23,75. Las sesiones con portátil del plan premium de 60, 45 y 55 minutos tienen una media de aproximadamente 53,33, mientras que la única sesión con teléfono del plan premium dura 30 minutos. Estas celdas describen la duración de las sesiones, no los recuentos de usuarios.

Una lista de Series puede proporcionar varios niveles de fila o columna. Las calificaciones agrupadas en intervalos también funcionan como categorías: cruzar fail, pass, merit y distinction con el grupo de clase da recuentos para day de 1, 2, 2, 2 y para evening de 1, 2, 1, 1. El significado de cada celda sigue dependiendo de su clave de fila, su clave de columna y el estadístico elegido.

Puntos clave

  • crosstab cuenta las combinaciones de las Series o arreglos proporcionados.
  • Elige la normalización por fila, por columna o respecto al total general según la población que forme el denominador de la pregunta.
  • Añadir values y aggfunc cambia las celdas de frecuencias a un resumen numérico.

Ejemplos de Agrupación y agregación con pandas

5 Lecciones Interactivas

1

Convierte filas en grupos útiles

12 pasos
Crea e inspecciona una agrupación, elige claves y ten en cuenta cada fila del resultado.
  1. 1
    IntroducciónEmpieza con una pregunta por grupos

    Un conjunto de pedidos puede responder a «¿Cuántas unidades se vendieron?» o «¿Cuántas unidades vendió cada región?». La segunda pregunta necesita una clave de agrupación.

    Dividiremos los pedidos por región, seleccionaremos una columna de valores y combinaremos los resultados de cada grupo. Después cambiaremos las claves y la estructura de salida, teniendo en cuenta qué filas incluye el cálculo.

  2. 2
    EjemploPrepara cuatro pedidos

    Utiliza una tabla pequeña para poder seguir cada fila:

    orders = pd.DataFrame({
        "region": ["West", "East", "West", "East"],
        "product": ["tea", "tea", "coffee", "tea"],
        "units": [6, 3, 8, 5]
    })
    

    Las dos filas de West están separadas por una fila de East. Aun así, pertenecen al mismo grupo cuando la clave es la región; la coincidencia de claves importa más que estar en posiciones vecinas.

  3. 3
    ExplicaciónDivide, suma y combina
    orders.groupby("region")["units"].sum()
    

    East recibe las unidades 3 y 5, lo que da 8. West recibe 6 y 8, lo que da 14. pandas combina los dos totales en una Series indexada por región.

    Llamar solo a groupby("region") crea el objeto GroupBy. La selección y sum() especifican qué calcular a partir de esa agrupación.

  4. 4
    ConsejoInspecciona antes de calcular

    Guarda g = orders.groupby("region") cuando sea útil realizar varias inspecciones. g.ngroups indica 2, g.size() indica dos filas por región y g.get_group("West") muestra las observaciones de West.

    Seleccionar g["units"] produce un SeriesGroupBy. Seleccionar g[["units"]] conserva la forma de DataFrame, aunque solo se seleccione una columna de valores.

  5. 5
    DesafíoPredice un total modificado

    Se añade a la tabla un nuevo pedido de West con 4 unidades. ¿Cuáles son los totales regionales y elimina la agrupación las filas de pedidos originales?

    ---reveal---

    East se mantiene en 8. West pasa a 18 porque el nuevo pedido se suma a sus 14 unidades existentes. Las filas originales permanecen en la tabla de entrada; la suma agrupada es un nuevo objeto de resumen con una entrada por región.

  6. 6
    EjemploAñade una segunda clave
    orders.groupby(["region", "product"])["units"].sum()
    

    Con los cuatro pedidos originales, East–tea suma 8, West–coffee suma 8 y West–tea suma 6. La Series tiene un índice de dos niveles.

    unstack() mueve el producto a las columnas. East no tiene ninguna fila de café, por lo que su celda de café es un valor faltante; rellenarla con cero es adecuado para este informe de totales de unidades.

  7. 7
    ConexiónUna clave puede calcularse
    orders.groupby(orders["units"] >= 5)["units"].sum()
    

    La clave booleana crea un grupo False que suma 3 y un grupo True que suma 19. Asigna una etiqueta a cada fila en lugar de filtrar los pedidos pequeños.

    Una Series a la que se ha aplicado una correspondencia también funciona como clave. Las claves Series se alinean por etiqueta de fila, mientras que un arreglo proporciona una etiqueta por posición y debe coincidir con el número de filas.

  8. 8
    DesafíoLee una clave del índice

    Una Series de existencias tiene el índice M1, N1, M2 y los valores 4, 9, 7. ¿Qué devuelve stock.groupby(lambda label: label[0]).sum()?

    ---reveal---

    M suma 11 y N suma 9. La función recibe cada etiqueta del índice y devuelve su primera letra. No inspecciona el valor de existencias. Un diccionario pasado directamente como clave también establece correspondencias con las etiquetas del índice; aplica primero una correspondencia a una columna cuando sus valores definan los grupos.

  9. 9
    ExplicaciónElige las etiquetas y el orden

    orders.groupby("region", as_index=False)["units"].sum() devuelve una tabla con columnas de región y unidades. reset_index() convierte un resumen indexado en la misma estructura plana.

    La ordenación predeterminada de claves muestra East antes de West. Para ordenar los totales, ordena los valores calculados: .sum().sort_values(ascending=False). El orden de las claves y el de los valores responden a necesidades distintas.

  10. 10
    Idea claveLas claves faltantes y las no utilizadas son distintas

    Supón que la región es categórica y también declara North, sin pedidos de North. Desde pandas 3.0, la opción predeterminada observed=True omite esa categoría no utilizada; observed=False la muestra.

    Una fila sin región es un asunto distinto. La opción predeterminada dropna=True la excluye de los grupos. dropna=False conserva un grupo de claves faltantes. Una opción no puede sustituir a la otra.

  11. 11
    DesafíoConcilia el informe

    Los cuatro pedidos originales suman 22 unidades. Un quinto pedido tiene 7 unidades y ninguna región. Una columna categórica de región también declara una categoría North no utilizada. ¿Cómo puede un informe sumar 29 y mostrar North?

    ---reveal---

    Agrupa con dropna=False, observed=False. El grupo de claves faltantes conserva las 7 unidades adicionales; North aparece como categoría no utilizada con suma 0. Utiliza también as_index=False si el informe necesita columnas de claves normales.

  12. 12
    RepasoComprueba claves, valores y forma

    Elige la clave que expresa qué filas pertenecen al mismo grupo y después elige la operación y las columnas de valores seleccionadas. Inspecciona los grupos cuando no esté claro qué filas pertenecen a cada uno.

    Después de calcular un total, comprueba si las claves faltantes causaron la exclusión de filas. Para la presentación, decide entre un resultado indexado y columnas de claves normales, y distingue entre ordenar los nombres de grupo y ordenar los valores calculados.

2

Elige y nombra los resúmenes de grupo

13 pasos
Calcula un informe de varias columnas y distingue los recuentos de filas, los valores registrados y las medias ponderadas.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónUn resumen debe responder a una pregunta
  2. 2
    EjemploExamina un lote con un valor faltante
  3. 3
    ExplicaciónInterpreta las opciones predeterminadas de reducción
  4. 4
    DesafíoCuenta las lecturas disponibles
  5. 5
    EjemploAsigna un nombre a cada salida
  6. 6
    ExplicaciónComprende las columnas con varias funciones
  7. 7
    DesafíoCorrige los nombres del informe
  8. 8
    EjemploAñade un rango personalizado
  9. 9
    ConsejoPrepara una columna booleana
  10. 10
    EjemploPondera la cantidad medida
  11. 11
    DesafíoCalcula el precio por unidad
  12. 12
    DesafíoCombina medias de grupos desiguales
  13. 13
    RepasoConserva el significado de cada estadístico
3

Mantén el contexto del grupo en las filas correctas

16 pasos
Calcula proporciones y operaciones ordenadas, filtra grupos y crea salidas flexibles sin perder la alineación de las filas.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónDecide qué filas necesita la respuesta
  2. 2
    EjemploDifunde un total
  3. 3
    EjemploConvierte totales en proporciones
  4. 4
    DesafíoElige el valor de relleno adecuado
  5. 5
    ExplicaciónEstablece primero la secuencia
  6. 6
    EjemploCompara con la observación anterior
  7. 7
    ConsejoElige la regla para los empates
  8. 8
    DesafíoSigue grupos intercalados
  9. 9
    EjemploConserva todas las filas de un grupo que cumple la condición
  10. 10
    ConsejoSelecciona filas o muestras dentro de los grupos
  11. 11
    DesafíoAplica una condición a todo el grupo
  12. 12
    ExplicaciónPredice la forma de apply
  13. 13
    EjemploDevuelve varias filas por grupo
  14. 14
    DesafíoCorrige una asignación a filas
  15. 15
    DesafíoCombina un total de grupo con una decisión por fila
  16. 16
    RepasoAdapta el método al resultado
4

Crea y compara rangos numéricos

14 pasos
Elige límites fijos o basados en cuantiles y utiliza las categorías resultantes para el análisis agrupado.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónElige qué debe significar un tramo
  2. 2
    EjemploCrea intervalos fijos
  3. 3
    ExplicaciónIncluye los valores de los extremos
  4. 4
    ConsejoMantén las etiquetas en el orden de los intervalos
  5. 5
    DesafíoSitúa los valores de los límites
  6. 6
    ExplicaciónCalcula un cuantil muestral
  7. 7
    EjemploDivide por recuento o amplitud
  8. 8
    Idea claveLos empates pueden cambiar el número de intervalos
  9. 9
    DesafíoElige límites estables
  10. 10
    EjemploResume otra variable
  11. 11
    ConsejoMuestra los grupos vacíos con claridad
  12. 12
    DesafíoCambia la población de referencia
  13. 13
    DesafíoInterpreta la comparación final
  14. 14
    RepasoInterpreta los rangos antes de comparar resultados
5

Interpreta totales y proporciones de doble entrada

11 pasos
Crea una tabla dinámica y elige los denominadores de una tabla de contingencia según la pregunta planteada.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónDa un significado a cada celda
  2. 2
    EjemploCrea una pequeña tabla dinámica
  3. 3
    ExplicaciónIndica la agregación
  4. 4
    Idea claveLos resúmenes marginales usan las observaciones originales
  5. 5
    DesafíoComunica ausencias y totales
  6. 6
    EjemploCuenta combinaciones de categorías
  7. 7
    ExplicaciónEmpieza por el denominador
  8. 8
    DesafíoCompara grupos desiguales
  9. 9
    ConexiónUna tabla de contingencia puede resumir valores
  10. 10
    DesafíoElige la tabla para un informe
  11. 11
    RepasoInterpreta juntas la función y la población

Ejercicios de Agrupación y agregación con pandas

50 Preguntas de Práctica en 5 sets

Set 1: Interpreta grupos y elige resúmenes útiles10 Preguntas de Práctica

Pregunta 1 de 10

Una tabla tiene las etiquetas de equipo Delta, Echo, Delta y los recuentos de artículos 6, 5, 9. ¿Qué devuelve agrupar por equipo y sumar los recuentos de artículos?
  1. Delta 15; Echo 5
  2. Delta 6; Echo 14
  3. Delta 20; Echo 20
  4. Delta 7,5; Echo 5
Mostrar respuestaOcultar respuesta
Respuesta: A
Ambas filas de Delta pertenecen al mismo grupo, por lo que sus recuentos suman 15. Echo tiene una fila con 5 artículos. Devolver 7,5 para Delta calcularía su media en lugar de la suma solicitada; la agrupación elige las filas, mientras que el método elige el estadístico.

Pregunta 2 de 10

Un DataFrame tiene las columnas site y material. ¿Cómo agrupas por cada combinación de estas dos columnas?
  1. df.groupby(("site", "material"))
  2. df.groupby("site")["material"]
  3. df.groupby(["site", "material"])
  4. df.groupby("site").get_group("material")
Mostrar respuestaOcultar respuesta
Respuesta: C
Una lista de nombres de columnas convierte cada combinación de ubicación y material en un grupo. Una tupla se interpreta como una sola etiqueta de columna, por lo que buscaría una única columna nombrada con esa tupla. Seleccionar la columna de material después de agrupar por ubicación no añade una segunda clave.

Pregunta 3 de 10

Se necesita un total agrupado como DataFrame con site y mass_kg como columnas normales. ¿Qué llamada produce esa estructura?
  1. df.groupby("site", sort=False)["mass_kg"].sum()
  2. df.groupby("site", as_index=False)["mass_kg"].sum()
  3. df.groupby("site", dropna=False)["mass_kg"].sum()
  4. df.groupby("site", observed=False)["mass_kg"].sum()
Mostrar respuestaOcultar respuesta
Respuesta: B
as_index=False conserva la clave de agrupación en una columna normal y devuelve un DataFrame plano. La opción predeterminada coloca las etiquetas de ubicación en el índice del resultado. sort=False cambia el orden de las claves de grupo, pero no las saca del índice.

Pregunta 4 de 10

Un lote tiene las lecturas 8, un valor faltante, 12, un valor faltante. ¿Cuáles son su size() y su count() de lecturas?
  1. Tamaño 2; recuento 4
  2. Tamaño 4; recuento 4
  3. Tamaño 2; recuento 2
  4. Tamaño 4; recuento 2
Mostrar respuestaOcultar respuesta
Respuesta: D
Hay cuatro filas, por lo que el tamaño del grupo es 4. Solo hay dos lecturas registradas, por lo que el recuento de lecturas es 2. Un recuento de 4 trataría las entradas faltantes como valores observados y podría exagerar la cantidad de datos disponibles para una media.

Pregunta 5 de 10

Necesitas una fila por máquina con las columnas peak y average a partir de load. ¿Qué agregación con nombres de salida es adecuada?
  1. .agg(peak=("load", "max"), average=("load", "mean"))
  2. .agg(load=("peak", "max"), average=("load", "mean"))
  3. .agg(peak=("load", "mean"), average=("load", "max"))
  4. .agg(peak=("max", "load"), average=("mean", "load"))
Mostrar respuestaOcultar respuesta
Respuesta: A
Cada argumento con nombre asigna un nombre a una salida y su par indica la columna de entrada seguida de la función. La carga máxima corresponde a peak y la carga media a average. Invertir el par pediría a pandas que buscara columnas de entrada con nombres de funciones en lugar de usar la columna de carga.

Pregunta 6 de 10

Tres registros de un laboratorio tienen lecturas de energía de 4, 6 y 10 kWh. ¿Qué valor debe recibir la fila de 6 kWh cuando cada lectura se divide por la suma transformada del laboratorio?
  1. 0,60
  2. 0,20
  3. 0,30
  4. 0,50
Mostrar respuestaOcultar respuesta
Respuesta: C
El total del laboratorio es 20 kWh y la fila aporta 6 de esos 20, por lo que su proporción es 0,30. La suma transformada repite 20 en cada fila del laboratorio. Dividir por la lectura mayor de 10 daría 0,60, que mide una comparación diferente.

Pregunta 7 de 10

Las filas están en orden de eventos: el grupo A tiene el valor 7, el grupo B tiene 3 y después el grupo A tiene 5. ¿Cuál es la salida de la suma acumulada agrupada en ese orden de filas?
  1. 7, 10, 15
  2. 7, 3, 12
  3. 12, 3, 12
  4. 0, 0, 1
Mostrar respuestaOcultar respuesta
Respuesta: B
El grupo A acumula sus propios valores, primero 7 y después 12. El grupo B comienza por separado en 3 y la salida conserva el orden original de las filas. La secuencia 7, 10, 15 sería una suma acumulada de toda la columna, cruzando el límite entre grupos.

Pregunta 8 de 10

¿En qué intervalo cae el valor 40 en pd.cut(x, [0, 20, 40, 60]) con el cierre predeterminado?
  1. (0, 20]
  2. (40, 60]
  3. Sin intervalo
  4. (20, 40]
Mostrar respuestaOcultar respuesta
Respuesta: D
Los intervalos predeterminados incluyen su extremo derecho y excluyen su extremo izquierdo. Por tanto, el valor 40 está incluido en el intervalo que termina en 40. Colocarlo en el intervalo que empieza en 40 utilizaría un cierre por la izquierda, que requiere otra configuración.

Pregunta 9 de 10

Una celda tiene dos duraciones de entrega, 12 y 18 minutos. ¿Qué contiene una celda de pivot_table si se omite aggfunc?
  1. 15 minutos
  2. 30 minutos
  3. 2 entregas
  4. 18 minutos
Mostrar respuestaOcultar respuesta
Respuesta: A
La agregación predeterminada de la tabla dinámica es la media, por lo que la celda contiene 15 minutos. Ambas observaciones contribuyen a esa media. Un total de 30 minutos requeriría aggfunc="sum"; la estructura de la tabla dinámica no selecciona un total por sí sola.

Pregunta 10 de 10

Una encuesta tiene 9 trabajadores remotos, de los cuales 6 van en bicicleta, y 3 trabajadores presenciales, de los cuales 2 van en bicicleta. Una tabla de contingencia tiene el lugar de trabajo en las filas y el medio de desplazamiento en las columnas. ¿Qué resultado normalizado responde a «¿Qué fracción de los ciclistas trabaja en remoto?»?
  1. normalize="index"; 6/9
  2. normalize="all"; 6/12
  3. normalize="index"; 2/3
  4. normalize="columns"; 6/8
Mostrar respuestaOcultar respuesta
Respuesta: D
La población de referencia son todos los ciclistas: seis remotos y dos presenciales, lo que da ocho ciclistas. La proporción de remotos entre ellos es 6/8, obtenida mediante la normalización por columnas. El valor 6/9 responde, en cambio, a cuántos trabajadores remotos van en bicicleta, invirtiendo la población de referencia.
Set 2: Utiliza el contexto de las filas y compara distribuciones10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Ya se ha creado una agrupación g. ¿Qué expresión indica cuántos grupos contiene?
  1. g.count()
  2. g.ngroups
  3. g.size()
  4. len(g.groups.keys()) + 1
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Una Series tiene las etiquetas de fila 10 y 20 con los valores 5 y 8. Su Series de claves tiene los índices 20 y 10 con los valores «outer» e «inner», respectivamente. ¿Cuáles son las sumas de los grupos?
  1. Outer 5; inner 8
  2. Outer 13; inner 13
  3. Outer 8; inner 5
  4. Outer 0; inner 13
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Un grupo tiene 2 valores registrados con media 10; otro tiene 6 valores registrados con media 20. ¿Cuál es la media de los 8 valores?
  1. 17,5
  2. 15,0
  3. 20,0
  4. 30,0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Una agregación personalizada recibe las lecturas 3, 7 y 14. ¿Qué devuelve lambda s: s.max() - s.min()?
  1. 7
  2. 8
  3. 24
  4. 11
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Un DataFrame tiene etiquetas de fila enteras. ¿Por qué asignar directamente su Series de sumas indexada por región como columna nueva puede crear valores faltantes?
  1. La suma cambia las etiquetas enteras por nombres de región.
  2. La asignación empareja las etiquetas de fila con el índice del resumen.
  3. La Series de sumas almacena solo texto en lugar de valores numéricos.
  4. La agrupación sobrescribe el índice de filas antes de la asignación.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Un filtro de grupos debe conservar un taller solo si cada delay registrado es inferior a 4. ¿Qué predicado da una decisión por grupo?
  1. lambda g: g["delay"] < 4
  2. lambda g: (g["delay"] < 4).any()
  3. lambda g: (g["delay"] < 4).all()
  4. lambda g: g["delay"].count() < 4
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Una función de apply agrupado devuelve una Series con índices low y high para cada grupo. ¿Qué estructura crea pandas?
  1. Una Series con solo los dos valores del primer grupo
  2. Un DataFrame con el número original de filas de entrada
  3. Un DataFrame con grupos como columnas y filas originales
  4. Un DataFrame con una fila por grupo y dos columnas
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Los tiempos de entrega mensuales necesitan cuatro grupos con aproximadamente el mismo número de observaciones. ¿Qué operación es adecuada?
  1. pd.qcut(times, 4)
  2. pd.cut(times, 4)
  3. times.quantile(0.4)
  4. times.groupby(times).size()
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Ocho temperaturas son 10, 11, 12, 13, 30, 31, 32, 33 °C. La ubicación A tiene las cuatro primeras; la ubicación B tiene las cuatro últimas. ¿Dónde queda 13 °C al dividir por la mediana general y al dividir dentro de la ubicación A?
  1. Superior en el conjunto; inferior dentro de A
  2. Inferior en el conjunto; inferior dentro de A
  3. Inferior en el conjunto; superior dentro de A
  4. Superior en el conjunto; superior dentro de A
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Una tabla de frecuencias tiene filas X e Y y columnas P y Q: X tiene 2 y 6; Y tiene 3 y 1. Con normalización por filas y resúmenes marginales, ¿qué muestra la fila All para P y Q?
  1. 0,5 y 0,5
  2. 5/12 y 7/12
  3. 0,4 y 0,6
  4. 0,25 y 0,75
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 3: Comprueba las formas de los resultados y las decisiones sobre límites10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Una clave categórica incluye A, B y C, pero los datos solo contienen A y B. En pandas 3, ¿qué opción incluye C en un resumen agrupado?
  1. dropna=False
  2. as_index=False
  3. sort=False
  4. observed=False
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Se agregan dos columnas de valores con ["sum", "mean"]. ¿Qué etiquetas tienen las columnas del resultado?
  1. Pares de nombre de columna de entrada y nombre de función
  2. Solo los dos nombres originales de columnas de entrada
  3. Pares de valor de clave de grupo y etiqueta de fila de entrada
  4. Solo los nombres de las dos funciones de agregación seleccionadas
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Un proveedor envía 2 kg a un precio unitario de 9 y 8 kg a un precio unitario de 4. ¿Cuál es el precio medio por kilogramo de todo el envío?
  1. 6,5
  2. 4,0
  3. 5,0
  4. 5,5
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Los valores de un grupo en secuencia son 12, 9 y 15. ¿Qué devuelve pct_change() agrupado?
  1. Faltante, −3, 6
  2. Faltante, −0,25, aproximadamente 0,667
  3. 0, −0,25, 0,5
  4. Faltante, −0,333, 0,4
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Una tabla no está ordenada. Necesitas las dos filas de mayor mass_kg de cada batch. ¿Qué procedimiento es adecuado?
  1. Agrupar por lote y después tomar tail(2).
  2. Ordenar los nombres de lote y después tomar head(2).
  3. Agrupar por lote y después filtrar grupos de tamaño 2.
  4. Ordenar la masa de forma descendente y después aplicar head(2) agrupado.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Una función f ordena cada grupo por calidad y devuelve dos filas. Con df.groupby("batch", group_keys=False).apply(f), ¿qué debes esperar antes de volver a asignar el resultado?
  1. Etiquetas originales, con filas seleccionadas y ordenadas por grupo
  2. Orden original de filas, con todas las filas de entrada conservadas
  3. Una Series escalar indexada por lote con un valor por grupo
  4. Un índice entero nuevo con todas las filas de entrada conservadas
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Un informe utiliza pd.cut(x, [0, 10, 20], right=False). ¿Cuáles de los valores 0, 10 y 20 reciben un intervalo?
  1. Solo 10 y 20
  2. Solo 0 y 20
  3. Solo 0 y 10
  4. Los tres valores
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Los valores son 2, 2, 2, 2, 2, 2, 6, 10. Los límites de los cuartiles se repiten. ¿Qué consecuencia tiene qcut(..., 4, duplicates="drop") en comparación con asignar rangos primero mediante method="first"?
  1. Eliminar límites conserva cuatro intervalos y deshace empates.
  2. Eliminar límites reduce los intervalos; asignar rangos puede separar empates.
  3. Eliminar límites elimina filas empatadas; asignar rangos las conserva.
  4. Eliminar límites usa amplitudes fijas; asignar rangos usa cuartiles.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un informe de tramos fijos de calificaciones debe mostrar un tramo vacío además de los ocupados. ¿Qué opción y resultado expresan esto correctamente para recuentos y medias?
  1. observed=True; recuento 0, media 0
  2. dropna=False; recuento 1, media faltante
  3. observed=False; recuento 0, media faltante
  4. as_index=False; recuento faltante, media 0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Varias observaciones comparten las mismas claves de fila y columna. Necesitas un total por celda. ¿Qué operación es adecuada?
  1. pivot con la columna de valores
  2. unstack sobre las filas sin modificar
  3. crosstab sin una columna de valores
  4. pivot_table con aggfunc="sum"
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 4: Crea informes agrupados fiables10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Un cuaderno interactivo almacena g = df.groupby("team")[["items"]]. ¿Qué objeto devuelve g.sum()?
  1. Una Series con un total por equipo
  2. Un DataFrame con una columna items
  3. Un DataFrame con todas las filas originales
  4. Una Series con todas las filas originales
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Un DataFrame tiene etiquetas de índice a, b, c y cantidades 5, 8, 12. Una Series de claves tiene las etiquetas c y a con los valores «R» y «S». Con dropna=False, ¿qué sumas agrupadas se obtienen?
  1. R 5; S 8; faltante 12
  2. R 12; S 13; sin grupo faltante
  3. R 12; S 5; faltante 8
  4. R 17; S 8; sin grupo faltante
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Un solo grupo contiene un valor registrado, 11. ¿Qué devuelve su std() agrupado predeterminado?
  1. 0.0
  2. 11.0
  3. 1.0
  4. NaN
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Dos inspecciones registran los indicadores de defecto True, False para la planta A y True, True, False, False, False, False para la planta B. ¿Qué fracción de todos los artículos inspeccionados es defectuosa?
  1. 3/8
  2. 1/2
  3. 5/12
  4. 1/3
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

¿Qué implementación devuelve la fracción de lecturas de al menos 16 en cada grupo sin una función de Python por grupo?
  1. df.groupby("batch")["reading"].mean() >= 16
  2. df.assign(hit=df["reading"] >= 16).groupby("batch")["hit"].sum()
  3. df.assign(hit=df["reading"] >= 16).groupby("batch")["hit"].mean()
  4. df.groupby("batch")["reading"].count() / len(df)
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Las filas son A:4, B:9, A:12, B:3 para grupo y cantidad. Una columna nueva debe mostrar la proporción de cada fila respecto al total de su propio grupo. ¿Qué valores aparecen en orden de filas?
  1. 0,25; 0,25; 0,75; 0,75
  2. 1/7, 9/28, 3/7, 3/28
  3. 0,5; 0,5; 0,5; 0,5
  4. 0,25; 0,75; 0,75; 0,25
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Los eventos sin ordenar son U en el paso 2 con valor 15, V en el paso 1 con 8 y U en el paso 1 con 10. Después de ordenar por paso, ¿qué diferencia agrupada corresponde a la fila del paso 2 de U y por qué?
  1. −5; se usa el siguiente valor de U
  2. 5; se resta el valor de U en el paso 1
  3. 7; se resta el valor anterior de V
  4. 15; se reinicia en cada evento
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Los tramos fijos deben incluir 0 y 100 y colocar 50 en el inferior de dos tramos. ¿Qué llamada es adecuada?
  1. pd.cut(x, [0, 50, 100], right=False)
  2. pd.cut(x, [0, 50, 100], include_lowest=True)
  3. pd.cut(x, [0, 50, 100])
  4. pd.cut(x, [0, 50, 101], right=False)
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Los valores ordenados son 4, 8, 12, 24, 40. ¿Cuál es el cuantil 0,6 con la interpolación predeterminada de pandas?
  1. 16,8
  2. 24,0
  3. 19,2
  4. 12,0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Una tabla dinámica de medias tiene dos celdas ocupadas en una fila: una tiene una media de 10 a partir de 1 observación; la otra tiene una media de 30 a partir de 3 observaciones. Todos los valores y claves están registrados. ¿Cuál es la media marginal de esa fila?
  1. 20
  2. 40
  3. 25
  4. 30
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 5: Diagnostica análisis agrupados y comparaciones10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Las cantidades son 7 y 11 bajo las claves A y B, más 6 con una clave faltante. La clave es categórica y tiene una categoría C no utilizada. ¿Qué opciones conservan el total 24 y también muestran C?
  1. dropna=True, observed=False
  2. dropna=False, observed=True
  3. dropna=True, observed=True
  4. dropna=False, observed=False
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

En pandas 3, un grupo tiene los valores 2 y 6. ¿Por qué .agg("std") y .agg(np.std) pueden dar resultados distintos?
  1. La llamada con cadena usa un divisor muestral; NumPy usa uno poblacional.
  2. La llamada con cadena usa un divisor poblacional; NumPy usa uno muestral.
  3. La llamada con cadena redondea las entradas; NumPy las conserva.
  4. La llamada con cadena calcula la varianza; NumPy calcula la desviación estándar.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Una estación tiene las lecturas 2 y 14, y otra tiene 9, 9 y 9. Necesitas todas las filas originales de las estaciones cuya media supera 8. ¿Qué debe permanecer?
  1. Solo la fila de 14 de la primera estación
  2. Las cinco filas de ambas estaciones
  3. Las tres filas de la segunda estación
  4. Una fila de resumen de la segunda estación
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Desde pandas 3.0, ¿dónde puede leer su clave de grupo actual una función pasada a apply agrupado de un DataFrame?
  1. g.columns
  2. g.name
  3. g.index.name
  4. g.shape
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Un informe agrupa las horas de estudio en intervalos y muestra calificaciones medias de 60 y 85 con recuentos de 20 y 2. ¿Qué conclusión respaldan estos resultados?
  1. El estudio adicional causó un aumento de 25 puntos por estudiante.
  2. El tramo superior es más fiable porque su media es mayor.
  3. Todos los estudiantes del tramo superior superaron a los demás.
  4. Las medias difieren; la superior se basa en solo dos calificaciones.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Una tabla de contingencia tiene departamentos en las filas y resultados en las columnas. El departamento J tiene 18 aprobados y 6 suspensos; K tiene 12 aprobados y 4 suspensos. ¿Cuál es la proporción de J entre los suspensos y cuál es su tasa de suspensos dentro del departamento?
  1. 60 % y 25 %
  2. 25 % y 60 %
  3. 75 % y 60 %
  4. 60 % y 75 %
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Un equipo utiliza apply(lambda s: s - s.mean()) en una Series numérica agrupada, después restablece el índice del resultado y asigna sus valores por posición a la tabla original sin ordenar. ¿Por qué puede ser incorrecta la nueva columna?
  1. El cálculo utiliza una media general en lugar de medias de grupo.
  2. Restablecer el índice cambia todas las desviaciones a totales de grupo.
  3. La combinación por grupos puede asociar valores a filas incorrectas.
  4. Un resultado de apply siempre elimina la primera observación de cada grupo.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Una agregación personalizada utiliza len(s) sobre los valores 5, un valor faltante, 7. ¿Qué devuelve y qué mide ese número?
  1. 2; valores registrados
  2. 3; valores registrados
  3. 2; filas del grupo
  4. 3; filas del grupo
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

El grupo A tiene los valores 2, un valor faltante, 8; el grupo B tiene 20, un valor faltante, 40. Después de rellenar con la media transformada de cada grupo, ¿cuál es la media de los seis valores completos?
  1. 17,5
  2. Aproximadamente 11,667
  3. 20,0
  4. 15,0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Una celda de una tabla dinámica de medias no tiene observaciones. ¿Por qué puede fill_value=0 inducir a error a quien la lee?
  1. Cuenta la celda vacía como una fila nueva de entrada.
  2. Representa una media no observada como un cero medido.
  3. Elimina la categoría completa de la tabla.
  4. Cambia todas las medias no vacías a totales.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

¿Te atascas con una pregunta tuya? Ayuda con Tareas

Términos Clave

68 Términos Clave, cada uno con su definición

A

Agregación (reducción)
Una agregación reduce un grupo de observaciones a un valor de resumen por columna seleccionada, como una suma, un recuento o una media.
Una agregación de cantidades de pedidos por almacén da una cantidad total para cada almacén.
Agregación con nombres de salida
La agregación con nombres de salida especifica nombres de salida junto con columnas de entrada y funciones de resumen, y produce resultados con etiquetas claras.
La agregación con nombres de salida crea total_mass a partir de una suma y max_temperature a partir de un máximo en un solo informe.
Agregación personalizada
Una agregación personalizada es una función escrita por el usuario que recibe la Series de un grupo y devuelve un valor de resumen útil.
Una agregación personalizada puede comunicar el valor mayor de un grupo menos el menor como rango.
Agrupación en intervalos
La agrupación en intervalos convierte observaciones numéricas en categorías de intervalos, lo que permite que los rangos de valores actúen como etiquetas de agrupación.
Agrupar las duraciones de entrega en rangos de tiempo fijos facilita la comparación de un informe mensual de frecuencias.
Alineación por índices
La alineación por índices empareja objetos de pandas según sus etiquetas de índice al combinar o asignar valores, incluidas las claves de agrupación en una Series.
La alineación por índices asocia una clave con la etiqueta de fila 8 a la fila de datos 8, aunque la Series de claves se muestre en otro orden.
Análisis por cuantiles
El análisis por cuantiles compara una medida entre grupos definidos por intervalos de cuantiles, como las partes inferior y superior de una muestra.
El análisis por cuantiles puede resumir la duración de las sesiones de los clientes en cada cuarto de los importes de compra.
Análisis por intervalos
El análisis por intervalos resume una variable dentro de rangos numéricos de otra y suele comunicar recuentos y medias para cada rango.
El análisis por intervalos compara las calificaciones medias de examen de estudiantes en distintos rangos fijos de horas de estudio.
Aplicación de una función por grupos (apply)
La aplicación de una función por grupos ejecuta una función en cada grupo y combina salidas escalares, Series o DataFrames en un resultado.
La aplicación de una función por grupos puede calcular una correlación a partir de dos columnas medidas dentro de las observaciones de cada grupo de clase.
Asociación
Una asociación es una relación observada entre variables, como la variación de las medias de grupo entre intervalos, sin que se establezca una causa.
Una asociación entre tramos de horas de estudio y calificaciones medias también puede reflejar otras diferencias entre estudiantes.

C

Categoría no utilizada
Una categoría no utilizada es un valor categórico declarado que no tiene observaciones en el conjunto de datos actual, pero que puede aparecer en un resumen.
Una categoría no utilizada para un almacén conserva su lugar en un informe cuando se elige observed=False.
Categorías observadas
Las categorías observadas son los valores categóricos realmente presentes en los datos, a diferencia de las categorías declaradas sin filas.
Solo las categorías observadas aparecen de forma predeterminada cuando se agrupa una clave categórica en pandas 3.
Clave de agrupación
Una clave de agrupación asigna cada fila a un grupo; varias claves asignan las filas según su combinación compartida de valores.
Una clave de agrupación basada en el tipo de material coloca todos los registros de aluminio en el mismo grupo de análisis.
Clave faltante
Una clave faltante es un valor de agrupación ausente que excluye una fila de forma predeterminada o forma un grupo separado cuando se usa dropna=False.
Una clave faltante en la columna de región puede explicar por qué las sumas regionales omiten un pedido que sí está registrado.
Claves de grupo
Las claves de grupo identifican las partes devueltas en un resultado agrupado y apply puede añadirlas como nivel externo del índice.
Las claves de grupo situadas por encima de las etiquetas de fila originales indican con claridad qué región aportó cada pedido seleccionado.
Columnas jerárquicas
Las columnas jerárquicas tienen varios niveles de etiquetas que suelen emparejar cada variable medida con su función de agregación.
Las columnas jerárquicas distinguen una media de unidades de una media de ingresos cuando ambos estadísticos aparecen juntos.
Combinación de claves duplicada
Una combinación de claves duplicada se produce cuando varias filas comparten las claves de fila y columna que identificarían una celda de una tabla dinámica.
Una combinación de claves duplicada necesita agregarse mediante pivot_table antes de ocupar una celda numérica.
Correspondencia
Una correspondencia asocia etiquetas o valores de entrada con claves de salida, permitiendo que varias categorías originales compartan un grupo más amplio.
Una correspondencia de regiones a zonas puede combinar varias cantidades regionales en un total de zona.
Cuantil
Un cuantil indica una posición fraccionaria especificada en datos ordenados; pandas puede interpolar cuando esa posición cae entre valores.
El cuantil 0,5 es la mediana de un grupo, mientras que el cuantil 0,9 marca una posición relativa más alta.
Cuartil
Un cuartil es uno de los puntos de corte que dividen una distribución en cuartos, habitualmente en las probabilidades 0,25, 0,5 y 0,75.
Los límites de los cuartiles muestrales permiten que qcut divida las observaciones en cuatro grupos con aproximadamente el mismo número de elementos.

D

Desapilamiento
El desapilamiento es una operación que mueve un nivel del índice a las columnas y convierte combinaciones indexadas en una tabla más ancha.
El desapilamiento convierte las etiquetas de producto de un índice agrupado en columnas junto a los totales de cada región.
Desviación estándar muestral
La desviación estándar muestral mide la dispersión alrededor de una media utilizando un divisor igual al número de observaciones registradas menos uno.
Un grupo con una lectura registrada tiene una desviación estándar muestral faltante con la opción predeterminada de pandas.
Desviación respecto a la media del grupo
Una desviación respecto a la media del grupo es un valor menos la media de su propio grupo y muestra cuánto se encuentra por encima o por debajo de esa media.
Una desviación positiva respecto a la media del grupo indica un pedido con ingresos por encima de la media de su región.
Diccionario de agregación
Un diccionario de agregación relaciona las columnas de entrada de un DataFrame con funciones, permitiendo distintos resúmenes para distintas medidas.
Un diccionario de agregación puede solicitar una suma para las unidades y tanto una media como un máximo para la duración.
Difusión (broadcasting)
La difusión repite un resultado escalar de grupo en las filas del grupo, poniéndolo a disposición de cálculos por fila.
Difundir un total de grupo mediante transform da a cada fila el denominador para calcular su propia proporción.
Dividir, aplicar y combinar
Dividir, aplicar y combinar es un patrón que agrupa las filas coincidentes, procesa cada grupo por separado y reúne sus resultados.
El patrón de dividir, aplicar y combinar convierte una tabla de pedidos individuales en una cantidad total por cada región.

E

Empate
Un empate se produce cuando las observaciones tienen valores iguales; mantener juntos los valores empatados puede hacer que los recuentos de los intervalos definidos por cuantiles sean desiguales.
Un empate en un cuartil muestral puede colocar varias observaciones iguales en un intervalo y dejar recuentos desiguales.
Expresión lambda
Una expresión lambda define una función anónima breve de Python, que suele utilizarse para un cálculo personalizado compacto por grupo.
Una expresión lambda puede devolver la fracción de lecturas que alcanzan un umbral de temperatura especificado.

F

Filtrado de grupos o filas
Un filtrado de grupos o filas conserva filas o grupos originales seleccionados y mantiene sus etiquetas de fila en lugar de sustituirlos por resúmenes.
Un filtrado puede conservar todos los pedidos de las regiones que tienen al menos tres pedidos en el conjunto de datos.
Filtro de grupos
Un filtro de grupos conserva o elimina un grupo completo mediante una única decisión booleana y devuelve las filas originales de los grupos que cumplen la condición.
Un filtro de grupos conserva todos los registros de las estaciones cuya medición media supera un umbral de informe.
Función aplicada a un grupo
Una función aplicada a un grupo recibe los datos de un grupo y calcula su resultado; apply agrupado puede proporcionarle varias columnas juntas.
Una función aplicada a un grupo puede ordenar todas las columnas de cada lote y devolver sus dos registros de mayor calidad.
Función de agregación
Una función de agregación determina cómo una celda de una tabla dinámica combina sus observaciones, por ejemplo mediante una media, una suma o un recuento.
Al elegir la suma como función de agregación, una celda con claves repetidas muestra los ingresos totales en lugar de los ingresos medios.

G

Grados de libertad
Los grados de libertad son las cantidades de información independientes disponibles para estimar la dispersión; la varianza muestral utiliza uno menos que el número de valores registrados.
Con tres lecturas registradas, los grados de libertad para la varianza muestral predeterminada son dos.

Í

Índice jerárquico (MultiIndex)
Un índice jerárquico es un índice con varios niveles que permite que una etiqueta de fila o columna represente una combinación de valores de claves.
Un índice jerárquico de región y producto identifica un total tanto por el lugar donde se hizo un pedido como por su contenido.

I

Interpolación lineal
La interpolación lineal estima un valor entre observaciones consecutivas tomando la fracción correspondiente de su diferencia.
La interpolación lineal puede situar un percentil muestral entre dos calificaciones aunque ninguna de ellas sea igual a él.
Intervalo cerrado por la derecha
Un intervalo cerrado por la derecha incluye su extremo superior; los intervalos predeterminados de cut excluyen el extremo izquierdo e incluyen el derecho.
El intervalo cerrado por la derecha (20, 40] contiene un valor de 40, pero excluye un valor de 20.
Intervalo definido por cuantiles
Un intervalo definido por cuantiles está delimitado por cuantiles muestrales y está pensado para contener una proporción elegida de las observaciones de la muestra.
Un intervalo definido por cuantiles para el cuarto superior de clientes puede cambiar sus límites numéricos en una muestra posterior.
Intervalos de igual amplitud
Los intervalos de igual amplitud dividen un rango numérico en intervalos del mismo ancho, sin exigir recuentos iguales de observaciones.
Los intervalos de igual amplitud pueden colocar la mayoría de las entregas en el primer intervalo cuando unas pocas demoras son extremadamente largas.

L

Límite de clase
Un límite de clase es una frontera entre intervalos o en sus extremos; los límites consecutivos definen los rangos posibles para asignar valores a los intervalos.
Un límite de clase en 50 separa dos rangos de calificaciones y la regla de cierre determina a cuál pertenece 50.

M

Media de valores booleanos
Una media de valores booleanos es la media de valores True y False interpretados como 1 y 0, que da la proporción de valores True.
Una media de indicadores booleanos de defecto da la fracción de artículos defectuosos de cada lote en lugar de su recuento de defectos.
Media ponderada
Una media ponderada da a las observaciones distinta influencia según los pesos especificados, como las unidades de cada pedido.
Una media ponderada de los precios por pedido usando los recuentos de unidades equivale a los ingresos totales divididos por las unidades totales.
Mediana
La mediana es el valor central de los valores registrados ordenados; cuando su número es par, es la media de los dos valores centrales.
La mediana de los importes de pedidos agrupados puede verse menos afectada por un pedido grande que su media.
Muestra por grupos
Una muestra por grupos selecciona observaciones por separado dentro de cada grupo, utilizando un número de filas o una fracción especificados para cada grupo.
Una muestra por grupos con n=1 incluye un registro de cada región no vacía en lugar de correr el riesgo de omitir regiones.

N

Normalización
La normalización convierte recuentos de frecuencia en proporciones dividiéndolos por un total elegido de fila, columna o general.
La normalización por columnas compara la pertenencia a planes por separado entre usuarios de teléfono y entre usuarios de portátil.

O

Objeto GroupBy
Un objeto GroupBy contiene información de agrupación y proporciona operaciones que calculan resultados a partir de las filas de cada grupo.
Un objeto GroupBy creado para equipos puede producir después tanto totales de artículos como tiempos medios de entrega.
Objeto invocable (callable)
Un objeto invocable es una función u objeto similar que pandas puede llamar sobre valores agrupados, utilizando las propias reglas de cálculo de ese objeto.
Un objeto invocable como np.std puede utilizar un divisor predeterminado distinto del de la función de pandas indicada con la cadena "std".

P

Población de referencia
Una población de referencia es el conjunto de observaciones utilizado para una comparación, como todas las filas o las filas de un subgrupo.
Una población de referencia formada por una clase puede dar a una calificación una etiqueta relativa distinta de la que recibe en el conjunto completo de datos de estudiantes.
Predicado
Un predicado es una función que devuelve una decisión booleana; un predicado de filter de GroupBy debe dar una decisión por grupo.
Un predicado que utiliza all() puede exigir que todas las lecturas de un grupo cumplan la misma condición de calidad.
Proporción por columna
Una proporción por columna divide el recuento de una celda por el total de su columna y describe la categoría de fila de esa celda dentro de la población de la columna.
Una proporción por columna en una tabla de plan por dispositivo da la proporción del plan básico entre todos los usuarios de teléfono.
Proporción por fila
Una proporción por fila divide el recuento de una celda por el total de su fila y describe la categoría de columna de esa celda dentro de la población de la fila.
Una proporción por fila en una tabla de plan por dispositivo da la proporción de usuarios de teléfono entre los usuarios del plan básico.
Proporción respecto al total general
Una proporción respecto al total general divide el recuento de una celda por el total general y describe la proporción que representa esa combinación entre todas las observaciones.
Una proporción respecto al total general de 0,2 significa que la combinación de categorías de la celda representa el 20 % de toda la tabla.
Puntuación z dentro del grupo
Una puntuación z dentro del grupo expresa la desviación de un valor respecto a la media de su grupo en unidades de la desviación estándar de ese grupo.
Una puntuación z dentro del grupo puede mostrar una lectura relativamente alta en un laboratorio aunque su valor absoluto sea moderado.

R

Rango denso
Un rango denso asigna el mismo rango a valores iguales y da al siguiente valor distinto el siguiente entero, sin dejar un hueco.
Con rango denso descendente, dos lecturas máximas iguales reciben el rango 1 y la siguiente lectura menor recibe el rango 2.
Rango dentro del grupo
Un rango dentro del grupo describe la posición de un valor respecto a los demás valores de su propio grupo, utilizando una regla elegida para los empates.
Un rango descendente dentro del grupo da al pedido más grande de cada región el rango 1 sin mover ninguna fila.
Recuento de filas
Un recuento de filas mide el número de observaciones de un grupo, incluidas las observaciones con valores faltantes en las columnas medidas.
El recuento de filas permanece en cinco aunque falten dos de las cinco lecturas de temperatura de un lote.
Recuento de valores distintos
Un recuento de valores distintos mide cuántos valores diferentes aparecen en un grupo; nunique() de pandas excluye los valores faltantes de forma predeterminada.
Un recuento de productos distintos por región muestra cuántos tipos de producto ha vendido cada región.
Recuento de valores presentes
Un recuento de valores presentes mide cuántos valores registrados tiene una columna seleccionada dentro de un grupo y excluye sus entradas faltantes.
El recuento de valores presentes es tres cuando un lote de cinco filas contiene solo tres temperaturas registradas.
Resultado escalar
Un resultado escalar es un valor devuelto para un grupo que apply agrupado combina en una Series indexada por claves de grupo.
Un resultado escalar del cálculo de precio de cada región da un único precio regional por unidad.
Resumen marginal
Un resumen marginal es una fila o columna de resumen calculada a partir de las observaciones originales mediante la función de agregación de la tabla dinámica.
Una media marginal pondera las celdas ocupadas según sus recuentos de observaciones porque calcula la media de las filas originales.

S

Selección de los n valores mayores
Una selección de los n valores mayores conserva un número elegido de las filas de mayor valor por grupo después de ordenar por la variable medida.
Una selección de dos pedidos por región puede usar una ordenación descendente de ingresos seguida de head(2) agrupado.
Suma acumulada
Una suma acumulada agrupada es un total acumulado que sigue el orden actual de las filas y vuelve a empezar para cada grupo.
La suma acumulada de unidades vendidas se reinicia al seguir la secuencia de pedidos de otra región.

T

Tabla de contingencia (tabulación cruzada)
Una tabla de contingencia, también llamada tabulación cruzada, es una tabla de frecuencias para combinaciones de variables categóricas.
Una tabla de contingencia de plan por dispositivo cuenta cuántos usuarios pertenecen a cada combinación de plan y dispositivo.
Tabla dinámica
Una tabla dinámica agrega columnas de valores para combinaciones de claves de fila y columna y muestra los resultados en una cuadrícula de doble entrada.
Una tabla dinámica puede mostrar las unidades totales vendidas para cada combinación de región y producto en un solo informe.
Tabla plana de resumen
Una tabla plana de resumen conserva las claves de agrupación como columnas normales, con una fila por cada combinación de claves resumida.
Una tabla plana de resumen con columnas de ubicación y masa total resulta cómoda para una combinación posterior por ubicación.
Transformación
Una transformación agrupada produce resultados con la longitud y el índice de la entrada, lo que permite que la información de grupo acompañe a cada fila.
Una transformación repite el total de una región en sus filas de pedidos para que cada pedido reciba una proporción regional.

V

Valor de relleno
Un valor de relleno sustituye las celdas faltantes de un resultado por un valor elegido para mostrarlas, que debe expresar correctamente el significado de la ausencia.
Un valor de relleno de cero puede describir la ausencia de pedidos en una tabla de recuentos, pero representar incorrectamente una media no observada.
Valor rezagado
Un valor rezagado es una observación anterior desplazada a una fila posterior dentro de la secuencia elegida, por separado para cada grupo.
Un valor rezagado permite que cada pedido compare sus unidades con las del pedido anterior de esa misma región.
Variable categórica ordenada
Una variable categórica ordenada es un conjunto de valores de categorías con una secuencia explícita, como el orden de menor a mayor de los intervalos numéricos.
Una variable categórica ordenada mantiene las etiquetas de calificación fail, pass, merit, distinction en su secuencia significativa.
Variación relativa
Una variación relativa es una diferencia respecto al valor anterior dividida por ese valor anterior, expresada como fracción.
Una variación relativa de 0,15 significa un aumento del 15 % respecto a la observación anterior del mismo grupo.

Sobre esta unidad

Por StudeliInformar de un error

Crea tus propios Materiales de Estudio

Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.

Comenzar