添加其余没有任何值的季度列

Add the remaining quarterly columns that do not have any values

我有如下每月时间序列数据:

  Item  2020 Jan  2020 Feb  2020 Mar  2020 Jul  2020 Aug  2020 Sep
0    A         0         1         2         3         4         5
1    B         5         4         3         2         1         0

我需要将月度数据转换为三个月总和的季度数据,因此我修改了 中的代码来做到这一点:

df = df.groupby(pd.PeriodIndex(df.columns, freq='Q'), axis=1).sum()

结果df如下:

  Item  2020 Q1  2020 Q3
0    A        3       12
1    B       12        3

但是,我想在两者之间列出所有季度,而不仅仅是值大于 0 的那些。所以我想要的输出如下:

  Item  2020 Q1  2020 Q2  2020 Q3
0    A        3        0       12
1    B       12        0        3

所以在这个输出中,有一个额外的列 Q2 因为它在第一季度和最后一个季度之间,即使它没有正值。有人知道怎么做吗?

使用DataFrame.reindex with period_range:

df = df.set_index('Item')
df.columns = pd.to_datetime(df.columns)

df = df.groupby(pd.PeriodIndex(df.columns, freq='Q'), axis=1).sum()
df = df.reindex(pd.period_range(df.columns.min(), df.columns.max(), freq='Q'), axis=1, fill_value=0)
print (df)
      2020Q1  2020Q2  2020Q3
Item                        
A          3       0      12
B         12       0       3