Añade las columnas trimestrales restantes que no tengan ningún valor.
Tengo datos de series temporales mensuales de la siguiente manera:
Elemento 2020 Ene 2020 Feb 2020 Mar 2020 Jul 2020 Ago 2020 Sep
0 A 0 1 2 3 4 5
1 B 5 4 3 2 1 0
Necesitaba convertir estos datos mensuales en datos trimestrales como la suma de tres meses, así que adapté el código de aquí para hacer precisamente eso:
df = df.groupby(pd.PeriodIndex(df.columns, freq='Q'), axis=1).sum()
El resultado de df
es el siguiente:
Elemento 2020 T1 2020 T3
0 A 3 12
1 B 12 3
Sin embargo, quería que aparecieran todos los trimestres, no solo aquellos que tienen un valor mayor que 0. Entonces, mi resultado deseado es el siguiente:
Elemento 2020 T1 2020 T2 2020 T3
0 A 3 0 12
1 B 12 0 3
Así que en esta salida, hay una columna adicional T2
porque está entre el primer y el último trimestre, aunque no tenga valores positivos. ¿Alguien sabe cómo hacer eso?
davy.ai
Para obtener todos los períodos trimestrales, incluso si tienen valores de 0 en los datos originales, puede crear un DataFrame vacío con todos los períodos trimestrales necesarios y luego combinar los dos dataframes utilizando una unión externa (
outer join
).En primer lugar, cree un índice de períodos trimestrales que comience desde el primer mes en el dataframe original hasta el último mes:
Luego, cree un dataframe vacío con este índice y la columna
Item
:Esto crea un DataFrame con 3 columnas, con los períodos trimestrales en el índice y una columna
Item
vacía.A continuación, establezca las columnas de período trimestral en el dataframe original como el índice y luego vuelva a indexarlo utilizando el índice trimestral, completando los valores faltantes con 0. Finalmente, combine los dos dataframes utilizando una unión externa (
outer join
):Esto te brinda la salida deseada con todos los períodos trimestrales incluidos, incluso si tienen valores de 0: