Tengo un marco de datos de pandas con una serie categórica a la que le faltan categorías.
En el ejemplo que se muestra a continuación, el group tiene las categorías "a" , "b" y "c" , pero no hay casos de "c" en el marco de datos.
import pandas as pd dfr = pd.DataFrame({ "id": ["111", "222", "111", "333"], "group": ["a", "a", "b", "b"], "value": [1, 4, 9, 16]}) dfr["group"] = pd.Categorical(dfr["group"], categories=["a", "b", "c"]) dfr.pivot(index="id", columns="group") El marco de datos pivotado resultante tiene columnas a y b . También esperaba una columna c que contuviera todos los valores faltantes.
value group ab id 111 1.0 9.0 222 4.0 NaN 333 NaN 16.0¿Cómo puedo girar un marco de datos en una serie categórica para incluir columnas con todas las categorías, independientemente de si estaban presentes en el marco de datos original?
pd.pivot_table tiene un argumento dropna que dicta descartar o no valorar columnas llenas de NaN.
Intente establecerlo en False :
import pandas as pd dfr = pd.DataFrame({ "id": ["111", "222", "111", "333"], "group": ["a", "a", "b", "b"], "value": [1, 4, 9, 16]}) dfr["group"] = pd.Categorical(dfr["group"], categories=["a", "b", "c"]) pd.pivot_table(dfr, index="id", columns="group", dropna=False)Puedes reindex . Esto funcionará incluso si su columna de value no es numérica (a diferencia pivot_table ):
output = (dfr.pivot(index="id", columns="group") .reindex(columns=pd.MultiIndex.from_product([["value"], dfr["group"].cat.categories] ) ) ) >>> output value abc id 111 1.0 9.0 NaN 222 4.0 NaN NaN 333 NaN 16.0 NaN