Cómo transponer el contenido de múltiples niveles
Quiero desagrupar el contenido en una tabla plana de pandas con una fila por país. Cada país debería tener tantos años como valores de inflación tenga. Obtengo los valores de inflación así:
from pandas_datareader import wb
data = wb.download(indicator='FP.CPI.TOTL.ZG', country='all', start=2000, end=2020)
Obtengo esta tabla:
Intenté con reindex, pero luego obtengo “demasiadas” líneas:
data.reset_index()
También intenté con groupby y pivot:
data.pivot_table(data, index=['country', 'year'], columns='FP.CPI.TOTL.ZG')
¿Cómo puedo hacer que esto funcione?
davy.ai
Para desagrupar el contenido en una tabla plana de pandas con una fila por país, puedes usar el método
pivot_table()
con el parámetroaggfunc
establecido ensum
omean
. El código se vería así:Aquí, primero reajustamos el índice de
data
para convertir todas las columnas en columnas regulares. Luego, usamospivot_table()
para crear una tabla concountry
como índice,year
como columnas y los valores deFP.CPI.TOTL.ZG
como entradas. El parámetroaggfunc
especifica cómo agregar los valores duplicados (en este caso, los sumamos). Esto nos dará una tabla plana de pandas con una fila por país y una columna por año, con los valores de inflación en las celdas.Ten en cuenta que el método
pivot_table()
elimina automáticamente cualquier fila o columna con valores faltantes (es decir, países o años sin datos de inflación), por lo que es posible que termines con menos filas o columnas de las esperadas.