毎月のデータがあります。 1月にq1が始まる3か月の「期間」に変換したい。したがって、次の例では、最初の3か月の集計はq2の開始に変換されます(望ましい形式:1996q2)。また、3つの月の値をまとめた結果のデータ値は、3つの列の平均(平均)です。概念的には、複雑ではありません。誰もが一度にそれを行う方法を知っていますか?可能性としては、ループを介して多くのハードワークを実行し、それから地獄をハードコードすることができますが、私はpandasであり、ブルートフォースよりも賢い何かを探しています。
1996-04 1996-05 1996-06 1996-07 ..... 25 19 37 40
だから私は探しています:
1996q2 1996q3 1996q4 1997q1 1997q2 ..... avg avg avg ... ...
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
[〜#〜] update [〜#〜]:結果の列を取得するDFの文字列としてperiod
dtype:
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')