2016-11-08 70 views
10

我有月度数据。我想将它转换为3个月的“期间”,q1在1月份开始。所以在下面的例子中,前3个月的聚合将转化为q2的开始(期望格式:1996q2)。而将3个月度值拼凑在一起产生的数据值是3列的平均值(平均值)。从概念上讲,并不复杂。有人知道如何一举完成吗?有可能,我可以通过循环做很多艰苦的工作,只是硬编码,但我是熊猫新手,寻找比蛮力更聪明的东西。如何将每月数据转换为每季度的熊猫

非常感谢。

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

所以我在寻找:

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

回答

17

你可以结合使用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 
+1

我忽略'pd.PeriodIndex'。我不会再有了。 – piRSquared

+0

@piRSquared,是的,非常方便 – MaxU

相关问题