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.

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:

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?

Tags:  , ,

Answer

  1. Avatar for 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ámetro aggfunc establecido en sum o mean. El código se vería así:

    import pandas as pd
    from pandas_datareader import wb
    
    data = wb.download(indicator='FP.CPI.TOTL.ZG', country='all', start=2000, end=2020)
    data.reset_index(inplace=True)
    table = pd.pivot_table(data, values='FP.CPI.TOTL.ZG', index='country', columns='year', aggfunc='sum')
    

    Aquí, primero reajustamos el índice de data para convertir todas las columnas en columnas regulares. Luego, usamos pivot_table() para crear una tabla con country como índice, year como columnas y los valores de FP.CPI.TOTL.ZG como entradas. El parámetro aggfunc 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.

Comments are closed.