我想对列名称进行分组并将其值添加到df中

时间:2018-08-20 21:44:20

标签: python pandas dataframe

这是我正在使用的df:

            2000-01    2000-02    2000-03   ...     2016-06  2016-07  2016-08
0            NaN        NaN        NaN   ...      590200   588000   586400
1       204400.0   207000.0   209800.0   ...      580600   583000   585100
2       136800.0   138300.0   140100.0   ...      209100   211000   213000
3        52700.0    53100.0    53200.0   ...      127400   128300   129100
4       111000.0   111700.0   112800.0   ...      192800   194500   195900
5       131700.0   132600.0   133500.0   ...      198200   199300   200600

我想每三个月按季度分组并添加其值。 因此,它应具有以下列:2000q1、2000q2 ...,并且2000q1的值应为2000-01、2000-02、2000-03值的总和。等等...

现在我正在使用嵌套循环,这是非常低效和缓慢的。任何想法如何使它更有效和更短?

1 个答案:

答案 0 :(得分:1)

设置

cols = pd.date_range('2000-01-31', '2001-08-31', freq='M').strftime('%Y-%m')
df = pd.DataFrame(1, index=range(3), columns=cols)

解决方案

先转换为pd.to_datetime,然后转换为.to_period('Q'),然后转换为groupby,并转换为axis=1

df.groupby(pd.to_datetime(df.columns).to_period('Q'), axis=1).sum()

   2000Q1  2000Q2  2000Q3  2000Q4  2001Q1  2001Q2  2001Q3
0       3       3       3       3       3       3       2
1       3       3       3       3       3       3       2
2       3       3       3       3       3       3       2