如何将Pandas的月度数据转换为季度数据

2024-05-16 08:39:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有每月的数据。我想把它转换成3个月的“周期”,第一季度从1月份开始。因此在下面的例子中,前3个月的聚合将转换为q2的开始(期望的格式:1996q2)。将三个月的数值混合在一起得到的数据值是三列的平均值。在概念上,并不复杂。有人知道怎么一下子做到吗?潜在的,我可以做很多艰苦的工作,通过循环和只是硬编码的地狱,但我是新的熊猫和寻找比暴力更聪明的东西。

1996-04   1996-05 1996-06  1996-07 .....
25          19       37      40

所以我在寻找:

1996q2  1996q3   1996q4  1997q1  1997q2 .....
 avg      avg      avg     ...     ...

Tags: 数据概念编码格式例子数值avg平均值
1条回答
网友
1楼 · 发布于 2024-05-16 08:39:47

可以将pd.PeriodIndex(..., freq='Q')groupby(..., axis=1)结合使用:

In [63]: df
Out[63]:
   1996-04  1996-05  2000-07  2000-08  2010-10  2010-11  2010-12
0        1        2        3        4        1        1        1
1       25       19       37       40        1        2        3
2       10       20       30       40        4        4        5

In [64]: df.groupby(pd.PeriodIndex(df.columns, freq='Q'), axis=1).mean()
Out[64]:
   1996Q2  2000Q3    2010Q4
0     1.5     3.5  1.000000
1    22.0    38.5  2.000000
2    15.0    35.0  4.333333

更新:要将结果DF中的列作为perioddtype中的字符串获取:

In [66]: res = (df.groupby(pd.PeriodIndex(df.columns, freq='Q'), axis=1)
                  .mean()
                  .rename(columns=lambda c: str(c).lower()))

In [67]: res
Out[67]:
   1996q2  2000q3    2010q4
0     1.5     3.5  1.000000
1    22.0    38.5  2.000000
2    15.0    35.0  4.333333

In [68]: res.columns.dtype
Out[68]: dtype('O')

相关问题 更多 >