2

毎月または四半期ごとのデータなど、パンダで低頻度の時系列を取得し、それを毎週の頻度にアップサンプリングするときに問題が発生しています。例えば、

data = np.arange(3, dtype=np.float64)
s = Series(data, index=date_range('2012-01-01', periods=len(data), freq='M'))
s.resample('W-SUN')

どこでも NaN で満たされたシリーズになります。基本的に同じことが起こります:

s.reindex(DatetimeIndex(start=s.index[0].replace(day=1), end=s.index[-1], freq='W-SUN'))

s代わりに PeriodIndex でインデックスを作成すると、エラーが発生します。ValueError: Frequency M cannot be resampled to <1 Week: kwds={'weekday': 6}, weekday=6>

毎週の日付が毎月の日付と正確に一致せず、週が月に重なる可能性があるため、これが発生する理由を理解できます。ただし、とにかくこれを処理するためのいくつかの簡単なルールを実装したいと思います。具体的には、(1) その月で終わる最後の週を月の値に設定する、(2) その月で終わる最初の週を月の値に設定する、または (3) その月で終わるすべての週を月の値に設定する価値。それを達成するためのアプローチは何ですか?これを隔週のデータにも拡張したいと思うことは想像できます。

編集:ケース(1)の出力を理想的にしたい例は次のとおりです。

2012-01-01   NaN
2012-01-08   NaN
2012-01-15   NaN
2012-01-22   NaN
2012-01-29   0
2012-02-05   NaN
2012-02-12   NaN
2012-02-19   NaN
2012-02-26   1
2012-03-04   NaN
2012-03-11   NaN
2012-03-18   NaN
2012-03-25   2
4

1 に答える 1

0

あなたの質問に関してgithubの問題を作成しました。パンダに関連する機能を追加する必要があります。

ケース3は、fill_methodを介して直接達成できます。

In [25]: s
Out[25]: 
2012-01-31    0
2012-02-29    1
2012-03-31    2
Freq: M

In [26]: s.resample('W', fill_method='ffill')
Out[26]: 
2012-02-05    0
2012-02-12    0
2012-02-19    0
2012-02-26    0
2012-03-04    1
2012-03-11    1
2012-03-18    1
2012-03-25    1
2012-04-01    2
Freq: W-SUN

しかし、他の人にとっては、今すぐいくつかのゆがみを行う必要があります。これは、次のリリースの前にgithubの問題によって修正されることを願っています。

また、最初の期間の開始から最後の期間の終了までアップサンプリングする、次の「スパン」リサンプリング規則も必要なようです。DatetimeIndexの開始点/終了点を固定する簡単な方法があるかどうかはわかりませんが、少なくともPeriodIndexにはあるはずです。

于 2012-10-11T18:15:47.863 に答える