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
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:
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étodoapply
junto con una función lambda que toma el índice de cada fila y extrae el primer nombre de él: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.