2017-11-20 7 views
0

データポイントの数を減らすためにPandas時系列をリサンプリングすると、各結果データポイントのタイムスタンプは各リサンプリングビンの先頭にあります。異なるリサンプリングレートでグラフをオーバープロットすると、データが明らかにシフトします。どのようにして再サンプリングされたデータのタイムスタンプをそのビンに「センタリングする」ことができますか?リサンプリングされた時系列の中心datetimes

(一時間にリサンプリングする場合)私は今を取得することです:

In [12]: d_r.head() 
Out[12]: 
2017-01-01 00:00:00 0.330567 
2017-01-01 01:00:00 0.846968 
2017-01-01 02:00:00 0.965027 
2017-01-01 03:00:00 0.629218 
2017-01-01 04:00:00 -0.002522 
Freq: H, dtype: float64 

私がしたいことは次のとおりです。apprarentシフトを示す

In [12]: d_r.head() 
Out[12]: 
2017-01-01 00:30:00 0.330567 
2017-01-01 01:30:00 0.846968 
2017-01-01 02:30:00 0.965027 
2017-01-01 03:30:00 0.629218 
2017-01-01 04:30:00 -0.002522 
Freq: H, dtype: float64 

MWE:

#!/usr/bin/env python3 
Minimal working example: 

import pandas as pd 
from matplotlib import pyplot as plt 
import numpy as np 
import seaborn 
seaborn.set() 

plt.ion() 

# sample data 
t = pd.date_range('2017-01-01 00:00', '2017-01-01 10:00', freq='1min') 
d = pd.Series(np.sin(np.linspace(0, 7, len(t))), index=t) 


d_r = d.resample('1h').mean() 

d.plot() 
d_r.plot() 

Apparent shift of resampled data

答えて

0

インデックスにtimedeltaを30分追加するのはどうですか?

df.index = df.index + datetime.timedelta(minutes=30) 
0

一般的に中間点の使用方法はわかりません。 labelパラメータがありますが、オプションはrightleftです。しかし、このように具体的な場合には、明示的loffset -parameterでリサンプリングタイムスタンプをオフセットすることができます

d.resample('1h', loffset='30min').mean() 

(編集:代わりに30Tの使用30minことがより読みやすいよう:http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases

+0

loffsetは仕事ができますそれは理想的ではありません。なぜなら、私はいくつかの異なるスケール(最小限、毎時、毎日)にリサンプリングすることになり、手動で各オフセットを指定する必要があるからです。 –

関連する問題