es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Método apply de Pandas: obtener una etiqueta de índice de una tabla dinámica.

Estoy utilizando un conjunto de datos conocido como ejemplo. Estos son los nombres de bebé más populares dados a un recién nacido en la ciudad de Nueva York, según la etnia. Este conjunto de datos conocido está disponible en la siguiente dirección: “https://data.cityofnewyork.us/api/views/25th-nujf/rows.csv”

He estado utilizando Pandas durante algunos meses y todavía tengo problemas con la función pivot_table. Quería saber cuál es el nombre más popular para cada año y hice esto (funciona):

import pandas as pd
url = “https://data.cityofnewyork.us/api/views/25th-nujf/rows.csv”
df = pd.read_csv(url)
pt = df.pivot_table(index=”Child’s First Name”, columns=”Year of Birth”, values=”Gender”, aggfunc=”count”, fill_value=0, margins=True)

La variable pt me da una lista de nombres de bebé en línea y en columna los años. Y los valores son la cantidad de veces que se ha dado el nombre de bebé en un año.

Ahora quiero hacer lo contrario: a partir de un valor en un año, encontrar el índice correspondiente (es decir, el primer nombre).
Por ejemplo, quiero saber qué nombres de bebé se dieron 4 veces en 2015.
Para hacer esto, hago lo siguiente:

condition = pt[2015] == 4
result = pt[condition]
print(result)

Ahora quiero utilizar una función apply que me devuelva, para cada fila, el primer nombre correspondiente.
Hice esto, pero no funciona:
pt[“First Name First Letter”] = pt.apply(lambda x: x.index[0], axis=1)

Definitivamente quiero usar la función apply porque siento que siempre hay algo que funciona de manera diferente cuando se trata de una pivot_table…
¿Quién podría ayudarme, por favor?
Aquí está el resultado falso que obtengo: aquí deberías colar el enlace a la imagen false result I get

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para encontrar el índice correspondiente (el primer nombre) para un valor durante más de un año, podemos usar el método reset_index para convertir la tabla pivot en un formato de tabla regular, filtrar la tabla para el valor y año deseado, y luego extraer el índice correspondiente.

    Aquí es cómo podemos hacerlo:

    # Convertir la tabla pivot en una tabla regular
    tabla = pt.reset_index()
    
    # Filtrar la tabla para el valor y el año deseado
    valor = 4
    año = 2015
    resultado = tabla.loc[(tabla[año] == valor), "Primer Nombre del Niño"]
    
    # Imprimir el resultado
    print(resultado)
    

    Esto nos dará un objeto Serie que contiene los primeros nombres que se dieron 4 veces en 2015.

    Si queremos agregar los primeros nombres como una nueva columna a la tabla pivot original pt, podemos usar el método apply junto con una función lambda que toma el índice de cada fila y extrae el primer nombre de él:

    pt["Primer Nombre"] = pt.apply(lambda x: x.index[0], axis=1)
    

    Esto agregará una nueva columna a la tabla pivot que contiene el primer nombre asociado con cada fila. Ten en cuenta que estamos usando el método index[0] para extraer el primer nombre, ya que el índice de cada fila en la tabla pivot original es el primer nombre.

Comments are closed.