2016-07-20 6 views
4

datetimeインデックスを毎時データに再サンプリングしようとしています。私はまた、月末までにリサンプリングをしたい。pandas - datetimeインデックスのリサンプリングと月末までの延長

したがって、次のdfを与えられた:

data = np.arange(6).reshape(3,2) 
rng = ['Jan-2016', 'Feb-2016', 'Mar-2016'] 
df = pd.DataFrame(data, index=rng) 
df.index = pd.to_datetime(df.index) 

      0 1 
2016-01-01 0 1 
2016-02-01 2 3 
2016-03-01 4 5 

私はで時間ごとのインデックスにこれをリサンプリングすることができます知っている:私はそれは2016-03-01でカットますdfを呼び出すときに、しかし、df = df.resample('H').ffill()。私は本質的にインデックスを1/1/2016から3/31/2016に1時間単位で実行させています。

最後のインデックスが月の初めであることを考えれば、これを月末まで延長するにはどうすればよいですか?2015-03-31

答えて

4

UPDATE:

In [37]: (df.set_index(df.index[:-1].union([df.index[-1] + pd.offsets.MonthEnd(0)])) 
    ....: .resample('H') 
    ....: .ffill() 
    ....: .head() 
    ....:) 
Out[37]: 
        0 1 
2016-01-01 00:00:00 0 1 
2016-01-01 01:00:00 0 1 
2016-01-01 02:00:00 0 1 
2016-01-01 03:00:00 0 1 
2016-01-01 04:00:00 0 1 

In [38]: (df.set_index(df.index[:-1].union([df.index[-1] + pd.offsets.MonthEnd(0)])) 
    ....: .resample('H') 
    ....: .ffill() 
    ....: .tail() 
    ....:) 
Out[38]: 
        0 1 
2016-03-30 20:00:00 2 3 
2016-03-30 21:00:00 2 3 
2016-03-30 22:00:00 2 3 
2016-03-30 23:00:00 2 3 
2016-03-31 00:00:00 4 5 

説明:

In [40]: df.index[-1] + pd.offsets.MonthEnd(0) 
Out[40]: Timestamp('2016-03-31 00:00:00') 

In [41]: df.index[:-1].union([df.index[-1] + pd.offsets.MonthEnd(0)]) 
Out[41]: DatetimeIndex(['2016-01-01', '2016-02-01', '2016-03-31'], dtype='datetime64[ns]', freq=None) 

旧不正解:迅速な対応のための

In [77]: df.resample('M').ffill().resample('H').ffill().tail() 
Out[77]: 
        0 1 
2016-03-30 20:00:00 2 3 
2016-03-30 21:00:00 2 3 
2016-03-30 22:00:00 2 3 
2016-03-30 23:00:00 2 3 
2016-03-31 00:00:00 4 5 
+0

感謝。しかし私はその質問を編集しています。残念ながら、出発指数も月末になった。私はインデックスの範囲を1/1/2016から作るようにしています - 3/31/2016 – sndrosilva

+0

@kobrakai、はい、そうです。私は私の答えを更新しました - チェックしてください – MaxU

+0

ありがとうMaxU。私が使った 'union'と' pandas.offset.MonthEnd'関数について読んでいます。 – sndrosilva

関連する問題